BGL:如何直接访问节点和边缘的数据?

时间:2010-12-01 11:56:32

标签: dictionary edge vertex boost-graph

我有关于Boost图形库的另一个问题,我无法通过谷歌搜索或阅读文档回答自己。它与我的其他问题没有直接关系,所以我认为我最好开始一个新的主题。

我有一个带有邻接布局的图形,并使用捆绑属性来访问节点和边缘的数据。为方便起见,我为我的Graph使用了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和特定描述符对象访问的映射值的不必要的重新计算。我的顶点和边包含大量数据,因此在某些情况下,我当前的代码会产生许多相同值的重新计算以处理这些数据。这似乎很难看。

有人知道是否有可能实现我想做的事情吗?

2 个答案:

答案 0 :(得分:1)

我使用了捆绑属性和:

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)

直接获取捆绑属性。

答案 1 :(得分:0)

在我的脑海中,这应该有效(假设您正在使用其中一个定义良好的graph_traits内置图表类型):

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

您可以通过这种方式实际访问,请查看BGL的图形概念以获取更多信息:http://www.boost.org/doc/libs/1_45_0/libs/graph/doc/graph_concepts.html