2010-12-01 4 views
1

나는 인터넷 검색이나 문서를 읽음으로써 스스로 답할 수없는 Boost Graphic Library와 관련하여 또 다른 문제가 있습니다. 다른 질문과 직접적인 관련이 없으므로 새 스레드를 만드는 것이 더 좋습니다.BGL : 노드 및 에지의 데이터에 직접 액세스하려면 어떻게합니까?

인접성 레이아웃이있는 그래프가 있으며 번들 된 속성을 사용하여 노드 및 가장자리의 데이터에 액세스합니다. 나는 편의를 위해 내 그래프에 typedef를 사용한다. 따라서 저장된 데이터에 액세스 할 수 있습니다 (예 : 이런 식으로 뭔가를 입력하여 vertex_descriptor을 위해 :

이제
Graph[my_vertex_descriptor].setX(4); 
Graph[my_vertex_descriptor].setY(10); 

내가 그런 일을 입력 할 수 있도록 데이터 저장 객체에 대한 참조를 정의하고 싶습니다 : 이것에 의하여

typedef Graph[vertex_descriptor]::type Vertex; 
Vertex v = Graph[my_vertex_descriptor]; 
v.setX(4); 
v.setY(10); 

또는 지도의 []operator과 특정 설명자 개체를 사용하여 액세스되는 매핑 된 값의 불필요한 재 계산을 피하기 위해 이와 비슷한 방법을 사용합니다. 내 꼭지점과 모서리에는 많은 양의 데이터가 포함되어 있으므로 특정 상황에서 현재 코드는이 데이터를 처리하기 위해 동일한 값을 여러 번 재 계산합니다. 이것은 추한 것 같습니다.

아마도 내가하려는 일을 달성 할 가능성이 있는지 누가 알 수 있습니까? 내 머리 위로 떨어져

답변

0

이 작동합니다 (당신이 잘 graph_traits 정의와 그래프 유형에 내장 중 하나를 사용하는 가정) :

typedef boost::graph_traits<Graph>::vertex_descriptor Vertex; 
Vertex v = Graph[my_vertex_descriptor]; 
v.setX(4); 
v.setY(10); 

는 실제로 많은이 방법에 액세스 할 수 있습니다를 취할 추가 정보를 BGL의 그래프 개념에 대해 살펴 : 직접 번들 속성을 가져올 수

Bundled_vertex_property prop_v = get(vertex_bundle, my_graph) // or get(vertex_bundle, v, my_graph) 
Bundled_edge_property prop_e = get(edge_bundle, my_graph) // or get(edge_bundle, v, my_graph) 

: http://www.boost.org/doc/libs/1_45_0/libs/graph/doc/graph_concepts.html

1

나는 번들 특성 및 사용 어.

+0

는 위에서 실제로해야한다 : 는'Bundled_vertex_property prop_v = GET (vertex_bundle, my_graph, vertex_descriptor)' 'Bundled_edge_property prop_e = GET (edge_bundle, my_graph, vertex_descriptor)' 또한 vertex_bundle''그'edge_bundle' 및주의 변수가 아니라 미리 정의 된 설명자입니다. –