1

我有另一个关于 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映射和特定描述符对象访问的。我的顶点和边包含大量数据,因此在某些情况下,我当前的代码会产生许多相同值的重新计算来处理这些数据。这似乎很难看。

有谁知道它是否有可能实现我想要做的事情?

4

2 回答 2

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)

直接获取捆绑的属性。

于 2011-02-09T22:16:12.627 回答
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

于 2010-12-03T19:58:57.090 回答