2014-01-26 1 views
1

У меня проблема с копированием графика с использованием boost? Мой код приведен ниже: он не позволяет мне создавать IndexMap как тип.Как скопировать граф с помощью boost C++?

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

} 

Благодарим за помощь.

+0

На всякий случай никто не знает определенного ответа здесь, у меня был большой успех в вопросе о «форсированных пользователях» в прошлом. –

ответ

4

Я думаю

typename graph_traits<Graph>::vertex_descriptor NodeID; 

должен быть

typedef typename graph_traits<Graph>::vertex_descriptor NodeID; 

Верхним вариантом является декларацией переменной NodeID типа graph_traits<Graph>::vertex_descriptor, в то время как последний является ЬурейиМ для того же типа.

+0

Спасибо! Эта проблема исправлена. Но это все еще дает мне проблемы в BGL_FORALL_VERTICES (v, g2, Graph). – user3236678

+0

@ user3236678 Поскольку 'Graph' является зависимым именем, вам нужно использовать BGL_FORALL_VERTICES_T (он использует' typename' внутри макроса). – llonesmiz

+0

@cv_and_he Спасибо большое! – user3236678