我需要能够为给定图形中的每个顶点存储图形类型树。我正在尝试使用boost::ptr_map<vertex_desc, Tree> DESC
,其中Tree
是邻接列表图表类型。在我创建一个Tree对象desc
并添加我想要的顶点之后,我尝试将desc存储到地图中,就像DESC.insert(std::make_pair(*vi.first, desc))
一样,但编译器不允许它。如果我
do DESC[*vi.first] = desc
编译器没有抱怨但是在我尝试使用地图后遇到非常奇怪的行为。我应该使用另一种方式存储Tree对象吗?
答案 0 :(得分:1)
您必须小心使用它们所属图表之外的vertex_descriptor
个对象。从docs page查看不同容器选项的迭代器/描述符稳定性/失效表。如果希望顶点描述符始终有效(除非被删除),则需要对boost::listS
参数使用VertexList
。
也就是说,如果你想要任何东西与图顶点相关联,你应该把它放到顶点属性中,特别是对于捆绑属性。但是如果你不能修改它,那么你应该像我说的那样做,即确保描述符在整个图形操作中保持有效。