C++ Boost图形库:如何保持对顶点的永久引用?(即不受顶点重新编号的限制)

C++ Boost图形库:如何保持对顶点的永久引用?(即不受顶点重新编号的限制),c++,boost,graph,C++,Boost,Graph,比方说,我想保留对顶点的引用。例如,在有限状态机中,我想标记开始状态和最终状态。首先想到的是图形:顶点描述符。但是,它是一个无符号整数,如果从图中删除一个顶点,则可以对其余顶点重新编号 那么,保留不受顶点移除影响的顶点引用的好方法是什么(当然,除非被引用顶点本身被移除)。谢谢 如果您参考表“描述符和迭代器无效摘要”。在上,您将看到,如果您将vecS用作VertexList模板参数,则顶点描述符仅在顶点删除期间无效。如果希望顶点描述符永远不会失效(除非它们是要删除的描述符),则应改用列表(或除向量

比方说,我想保留对顶点的引用。例如,在有限状态机中,我想标记开始状态和最终状态。首先想到的是图形:顶点描述符。但是,它是一个无符号整数,如果从图中删除一个顶点,则可以对其余顶点重新编号

那么,保留不受顶点移除影响的顶点引用的好方法是什么(当然,除非被引用顶点本身被移除)。谢谢

如果您参考表“描述符和迭代器无效摘要”。在上,您将看到,如果您将
vecS
用作
VertexList
模板参数,则顶点描述符仅在顶点删除期间无效。如果希望顶点描述符永远不会失效(除非它们是要删除的描述符),则应改用
列表
(或除
向量
以外的任何其他描述符,但对于顶点,最好只使用
列表

我在某些情况下使用的另一种可能性是,在适用的情况下,将不希望无效的两个(开始,最终)顶点放置在图形的最开始处(添加到图形的前两个顶点)。执行此操作时,即使使用
vecS
,移除顶点也不会移动第一个顶点的位置(仅移动移除顶点之后的顶点)。然而,这是一个黑客,你不应该太依赖这个技巧

我还实现了对
邻接列表
类的替换,该类还包括一个池容器选项,该容器具有
向量
的大部分优点(例如局部性),但在任何地方都保留顶点描述符。您可以,但需要注意的是,它还没有完全准备好生产

至于选择引用顶点的方式。。答案总是
顶点描述符
。其他任何东西都不安全。迭代器仅用于执行遍历,不能用作“指针”


编辑:如果您需要在泛型函数的上下文中测试特定图形类型是否具有“持久”顶点描述符,我不知道是否有任何直接测试,但您可以在顶点迭代器上检查迭代器类别。如果迭代器类别是“随机访问”,那么它通常意味着顶点描述符不是持久的(可以通过删除而失效)。通过迭代器类别,我的意思是,从,得到顶点迭代器的特征。我想这也是一个小技巧,但它是相当安全的。

现在可以使用
boost::stable_vector
吗?谢谢!整个BGL的事情开始有意义了:)