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

Dictionary BGL:如何直接访问节点和边缘的数据?,dictionary,vertex,boost-graph,Dictionary,Vertex,Boost Graph,我还有一个关于Boost图形库的问题,我无法通过谷歌搜索或阅读文档来回答。这与我的其他问题没有直接关系,所以我想我最好开始一个新的话题 我有一个带有邻接布局的图,并使用绑定属性访问节点和边的数据。为了方便起见,我在图表中使用了typedef。因此,我可以通过键入以下内容来访问存储的数据,例如顶点描述符: Graph[my_vertex_descriptor].setX(4); Graph[my_vertex_descriptor].setY(10); 现在,我想定义一个对数据存储对象的引用,以

我还有一个关于Boost图形库的问题,我无法通过谷歌搜索或阅读文档来回答。这与我的其他问题没有直接关系,所以我想我最好开始一个新的话题

我有一个带有邻接布局的图,并使用绑定属性访问节点和边的数据。为了方便起见,我在图表中使用了typedef。因此,我可以通过键入以下内容来访问存储的数据,例如顶点描述符:

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);
通过这种或类似的方法,我试图避免对映射值进行不必要的重新计算,这是通过使用映射的
[]运算符和特定描述符对象访问的。我的顶点和边包含大量数据,因此在某些情况下,我的当前代码会生成许多相同值的重新计算来处理这些数据。这看起来很难看


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

在我的脑海中,这应该是可行的(假设您使用的是一种具有定义良好的
graph\u traits
的内置图形类型):

typedef boost::图形特征::顶点描述符顶点;
顶点v=图[我的顶点描述符];
v、 setX(4);
v、 赛蒂(10);

实际上,您可以通过这种方式访问很多内容,查看BGL的图形概念以了解更多信息:

在我的脑海中,这应该是可行的(假设您使用的是一种具有定义良好的
图形特征的内置图形类型):

typedef boost::图形特征::顶点描述符顶点;
顶点v=图[我的顶点描述符];
v、 setX(4);
v、 赛蒂(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)

直接获取绑定属性。

我使用了绑定属性和:

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)

直接获取绑定属性。

上面的内容实际上应该是:
bundled\u vertex\u property prop\u v=get(vertex\u bundle,my\u graph,vertex\u descriptor)
bundled\u edge\u property\u e=get(edge\u bundle,my\u graph,vertex\u descriptor)
还要注意,
edge\u bundle
vertex\u bundle
不是变量,它们是预定义的描述符。上面应该是:
Bundled\u vertex\u property prop\u v=get(vertex\u bundle,my\u graph,vertex\u descriptor)
Bundled\u edge\u property\u e=get(edge\u bundle,my\u graph,vertex\u descriptor)
还要注意,
edge\u bundle
不是变量,它们是预定义的描述符。