2010-12-01 9 views
1

私はグーグルやドキュメントを読んで自分自身に答えることができなかったBoost Graphic Libraryに関する別の問題があります。それは私の他の質問に直接関係していないので、私は新しいスレッドを開始する方が良いと思った。BGL:ノードとエッジのデータに直接アクセスするにはどうすればよいですか?

私は隣接関係のレイアウトを持つグラフを持っており、バンドルされたプロパティを使ってノードとエッジのデータにアクセスします。私は便宜のために私のグラフのためのtypedefを使用します。したがって、私は格納されたデータにアクセスすることができます。

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

今、私はそのような何かを入力できるようにするデータ格納オブジェクトへの参照を定義したいと思います::のvertex_descriptorため、このような何か入力して、これにより

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

をかMapの[]operatorと特定の記述子オブジェクトを使用してアクセスされる、マップされた値の不必要な再計算を避けるために同様のアプローチをとっています。私の頂点と辺には多くのデータが含まれているので、現在のコードではこのデータを扱うために同じ値の再計算が数多く生成されることがあります。これは醜いようです。

誰かが私がやろうとしていることを達成する可能性があるかどうかを知っていますか?私の頭の上オフ

答えて

0

、これは動作するはずです(あなたがよくgraph_traits定義されてグラフの種類に建ての1を使用していると仮定します):

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)' はまた、 'edge_bundle'と' vertex_bundle'を注意変数ではなく、あらかじめ定義された記述子です。 –

関連する問題