2014-09-16 2 views
0

나는 BOOST를 사용할 의무가있다. BOOST :: Graph를 std :: vector에 복사하는 더 쉬운 방법은 무엇입니까?부스트 :: 벡터를 벡터로 복사 ::

나는 같은 것을 할 싶습니다 :

1. Create std::vector<float> v 
2. for every vertex in the boost::graph g 
    v.push_back(g.getDataofCurrentVertex()); 

나는 this 링크를 읽고,하지만 여전히, 나는 그것을 알아낼 수 없습니다.

그래프를 단지 컨테이너로보고 싶습니다.

+0

정점과 벡터에 모두 'v'를 사용하고 있는지 혼란스러운 점이 있습니다. – interjay

+0

오타 @interjay, 업데이트 됨! – gsamaras

+0

Afaik, 상자에서 사용할 수있는 helper 함수가 없다. bgl의 엔티티와 관련된 모든 속성을 되돌려 준다. 비록 내가 덤프() 예제를 한번 보았지만 그것을하는 방법. 그러나 기본적으로 필요한 것은 "복사"하려는 각 정점에 대해 모든 내부 또는 외부 (또는 다른 종류의 연관된) 속성에 액세스하는 것입니다. 물론 정점 당 데이터를 저장하려는 저장소를 제공하는 것이 좋습니다. [부스트 속성 맵 라이브러리] (http://www.boost.org/doc/libs/1_56_0/libs/property_map/doc/property_map.html)에 대해 자세히 읽어보십시오. –

답변

2

DAG를 반복하기 위해 깊이 우선 또는 너비 우선 탐색을 사용할 수 있습니다. 후자는 임시 큐가 필요합니다. 이러한 알고리즘에 대한 자세한 내용은 herehere을 참조하십시오.

물론 BOOST 그래프 데이터 구조는 꼭지점과 가장자리 반복자를 구현합니다 ... 링크의 "꼭지점 설정에 액세스하기"섹션에서 언급 한 verticies() 함수를 사용하여 모든 꼭지점을 반복 할 수 있습니다 당신이 가리켰다. 모든 vertifications를 간단한 순회하기위한 예제 코드는 아래 코드에 있습니다.

int main(int,char*[]) 
{ 
    // ... 

    // get the property map for vertex indices 
    typedef property_map<Graph, vertex_index_t>::type IndexMap; 
    IndexMap index = get(vertex_index, g); 

    std::cout << "vertices(g) = "; 
    typedef graph_traits<Graph>::vertex_iterator vertex_iter; 
    std::pair<vertex_iter, vertex_iter> vp; 
    for (vp = vertices(g); vp.first != vp.second; ++vp.first) { 
    //***replace this code with your vector::push_back() code *** 
    std::cout << index[*vp.first] << " "; 
    } 
    std::cout << std::endl; 
    // ... 
    return 0; 
} 
+0

나는 알고리즘을 안다. 문제는 BOOST입니다. 모든 정점을'std :: vector '에 복사하고 싶습니다. 어떻게 해야할지 모르겠습니다. – gsamaras

+0

좋아요, 사이트의 샘플 코드를보세요 ... 모든 버티션을 STL 컨테이너로 가져 오기 위해'for' 루프에'std :: vector' 코드를 둘 수있는 위치를 보여주기 위해 주석을 달았습니다 – Jason

+1

질문을 닫을 필요가 없습니다 ... 코드 샘플을 시험해보고 효과가 있는지 확인하십시오. – Jason

관련 문제