2012-02-13 3 views
5

adjacency_list 유형의 그래프를 adjacency_list 유형의 다른 그래프 하나에 복사하려면 어떻게해야합니까?다른 하나에 그래프 (adjacency_list) 복사

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

답변

6

copy_graph을 사용해 보셨습니까?


하드

문제가 오류를 보지 않고 무엇인지 알고 있지만 내 추측이 있다면, 내가 먼저 setS를 사용할 때 기본적으로 사용할 수없는 때문에 당신이 copy_graphvertex_index지도를 제공하고 있는지 확인하십시오 것 정점 저장 용. 귀하의 earlier question을 기반으로, 이미 파악한 것처럼 보이므로 모든 것을 하나로 모을 필요가 있습니다.

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의 경우 그래프 유형은 VertexListGraph의 모델이어야한다고합니다. 제 경우에는 그것이 adjacency_list라고했습니다. – shn

+1

@ user995434 그러나 adjacency_list는 VertexListGraph의 세분화 된 VertexAndEdgeListGraph의 모델입니다. 따라서 adjacency_list는 VertexListGraph의 모델입니다. –

+0

copy_graph()를 사용하여 내가하고 싶은 것을 보여주는 작은 예를 들어 주시겠습니까? 항상 컴파일 오류가 발생합니다. 미리 감사드립니다. – shn

관련 문제