如何使用boost c ++复制图形?

时间:2014-01-26 03:28:40

标签: c++ boost boost-graph

使用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);

}

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

我想

typename graph_traits<Graph>::vertex_descriptor NodeID;

应该是

typedef typename graph_traits<Graph>::vertex_descriptor NodeID;

上部变体是类型NodeID的变量graph_traits<Graph>::vertex_descriptor的声明,而后者是相同类型的typedef。