2012-02-13 9 views
5

Jak mogę skopiować wykres typu adjacency_list na inny wykres typu adjacency_list?skopiuj wykres (adjacency_list) do innego

typedef adjacency_list<setS, setS, undirectedS, NodeDataStruct, EdgeDataStruct> MyGraph; 
MyGraph g1, g2; 

// processing g1: adding vertices and edges ... 
// processing g2: adding some vertices and edges ... 

g1.clear(); 
g1 = g2 // this gives an execution error (exception) 
g1 = MyGraph(g2); // this also gives an execution error 
g2.clear(); 

Odpowiedz

6

Czy próbowałeś już copy_graph?


Trudno wiedzieć czym jest problem, nie widząc błędy, ale gdybym miał zgadywać, to bym najpierw upewnij się, że dostarczenie vertex_index mapę do copy_graph ponieważ nie jest domyślnie dostępny podczas korzystania setS do przechowywania wierzchołków. Opierając się na twoim earlier question, wygląda na to, że już to wymyśliliście, więc po prostu musimy to wszystko połączyć.

typedef adjacency_list<setS, setS, undirectedS, NodeDataStruct, EdgeDataStruct> MyGraph; 
    typedef MyGraph::vertex_descriptor NodeID; 

    typedef map<NodeID, size_t> IndexMap; 
    IndexMap mapIndex; 
    associative_property_map<IndexMap> propmapIndex(mapIndex); 

    MyGraph g1, g2; 

    // processing g1: adding vertices and edges ... 
    // processing g2: adding some vertices and edges ... 

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

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

Dla copy_graph mówi się, że typ wykresu musi być modelem VertexListGraph. W moim przypadku powiedziałem, że jest to lista adjacency_list. – shn

+1

@ user995434 Ale adjacency_list jest modelem VertexAndEdgeListGraph, który jest udoskonaleniem VertexListGraph. Stąd lista adjacency_list jest modelem VertexListGraph. –

+0

Czy możesz podać mały przykład ilustrujący użycie copy_graph() dla tego, co chciałbym zrobić? Zawsze daje mi błędy kompilacji. Z góry dziękuję. – shn

Powiązane problemy