我在使用boost复制图形时遇到问题吗?我的代码如下:它不允许我将IndexMap创建为类型。

template <class Graph>
int abc(Graph& G){

    typename graph_traits<Graph>::vertex_descriptor NodeID;

    typedef map<size_t, NodeID> IndexMap; //It doesn't let me to create NodeID type

    typedef map<NodeID, size_t> IndexMap;

    IndexMap mapIndex;

    associative_property_map<IndexMap> propmapIndex(mapIndex);

    Graph g1, g2;

    int i=0;
    BGL_FORALL_VERTICES(v, g2, Graph)
    {
       put(propmapIndex, v, i++);
    }

    g1.clear();
    copy_graph( g2, g1, vertex_index_map( propmapIndex ) );
    g2.clear();

}

int main(){

    typedef adjacency_list<listS, vecS, undirectedS,
        WeightProperty, property<edge_color_t, default_color_type>  MyGraphType;
    typename graph_traits<MyGraphType>::adjacency_iterator ai, ai_end;

    typename graph_traits<MyGraphType>::vertex_descriptor Vertex;
    ...
    ...

    MyGraphType G;
    ... //addition of vertices and edges
    abc(G);

}

感谢您的帮助。

最佳答案

我猜

typename graph_traits<Graph>::vertex_descriptor NodeID;

应该
typedef typename graph_traits<Graph>::vertex_descriptor NodeID;

上面的变体是声明类型NodeIDgraph_traits<Graph>::vertex_descriptor变量,而后者是同一类型的typedef。

10-08 12:00