C++ BGL:如何从绑定对象获取顶点描述符?

C++ BGL:如何从绑定对象获取顶点描述符?,c++,boost,C++,Boost,问题是关于Boost图形库(不幸的是,没有这样的标签) 假设我通过使用Boost图形库的捆绑属性特性,将小部件实例与图形的每个顶点相关联。类Widget实现operator=,与顶点关联的所有Widget都是不同的(即,对于任何一对顶点,widget1!=widget2适用于与这些顶点关联的Widget) 图形是否保持反向映射,即是否可以轻松检索与给定对象对应的顶点描述符?特别是,假设我有对象widget1和widget2,并且相应的顶点已添加到图形中。如何在两个对象之间(即对应顶点之间)添加边

问题是关于
Boost图形库
(不幸的是,没有这样的标签)

假设我通过使用
Boost图形库
的捆绑属性特性,将
小部件
实例与图形的每个顶点相关联。类
Widget
实现
operator=
,与顶点关联的所有Widget都是不同的(即,对于任何一对顶点,
widget1!=widget2
适用于与这些顶点关联的Widget)


图形是否保持反向映射,即是否可以轻松检索与给定对象对应的顶点描述符?特别是,假设我有对象
widget1
widget2
,并且相应的顶点已添加到图形中。如何在两个对象之间(即对应顶点之间)添加边?

我怀疑BGL本身无法提供从顶点属性到对应顶点描述符的映射,因为映射通常是多对一的。许多顶点/描述符可以对应于同一属性。即使在您的例子中,您知道不同的顶点必须具有不同的属性,但BGL通常无法知道这一点

当您使用
std:map
创建图形时,您可能可以自己维护此映射(例如
vd\u map
)。插入每个顶点及其属性时(
Widget
,在本例中),请插入相应的条目:

vd_map[widget] = desc;

我怀疑BGL本身无法提供从顶点属性到相应顶点描述符的映射,因为映射通常是多对一的。许多顶点/描述符可以对应于同一属性。即使在您的例子中,您知道不同的顶点必须具有不同的属性,但BGL通常无法知道这一点

当您使用
std:map
创建图形时,您可能可以自己维护此映射(例如
vd\u map
)。插入每个顶点及其属性时(
Widget
,在本例中),请插入相应的条目:

vd_map[widget] = desc;

如果我理解正确,顶点描述符可能会失效。那么,这个解决方案不意味着我永远不能删除顶点吗?我不知道你的代码想做什么。我想如果你需要删除一个顶点,你可以事先从这个反向查找映射中删除条目。你说得对!如果我使用列表,那么一切都很好,因为只有一个描述符在顶点删除时失效!如果我理解正确,顶点描述符可能会失效。那么,这个解决方案不意味着我永远不能删除顶点吗?我不知道你的代码想做什么。我想如果你需要删除一个顶点,你可以事先从这个反向查找映射中删除条目。你说得对!如果我使用列表,那么一切都很好,因为只有一个描述符在顶点删除时失效!请看这里:这个事实上可以为你工作请看这里:这个事实上可以为你工作