2012-02-13 16 views
5

Tipacaccess_list türünde bir grafiği nasıl başka bir grafiğe ekleyebilirim?başka bir taneye bir grafik (adjacency_list) kopyalayın

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

cevap

6

copy_graph denediniz mi?


Sert

sorun hatalarını görmeden ne olduğunu bilmek ama sanırım olsaydı, ben ilk siz setS kullandığınızda varsayılan olarak kullanılamaz olacağından copy_graph bir vertex_index harita sağlayarak emin olun ediyorum köşe depolama için. Senin earlier question dayanarak, o zaten anladım var bu yüzden sadece hepsini bir araya getirmek gerekiyor.

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

copy_graph için, grafik türünün bir VertexListGraph modeli olması gerektiği söylenir. Benim durumumda bunun bir bitişiklik_listesi olduğunu söyledim. – shn

+1

@ user995434 Ancak adjacency_list, VertexListGraph'ın iyileştirilmesi olan bir VertexAndEdgeListGraph modelidir. Bu nedenle adjacency_list bir VertexListGraph modelidir. –

+0

Yapmak istediklerim için copy_graph() yöntemini kullanarak küçük bir açıklayıcı örnek verebilir misiniz? Bana her zaman derleme hataları veriyor. Şimdiden teşekkürler. – shn

İlgili konular