boost graph——我应该使用迭代器还是描述符来保持对边或顶点的引用?



我目前正在设计一个由Boost Graph (adjacency_list)和几个类组成的应用程序,这些类从这个结构中引用边或顶点。

我的问题是:维护对节点或顶点的引用的推荐方法是什么?

我猜,在迭代器的情况下,对象访问更快,但迭代器可能会因图结构的动态变化而失效。

相反,描述符是一个id,这意味着搜索是检索数据所必需的,但在图发生变化时可能不太容易触发内存错误。

是真的吗?

迭代器/描述符的稳定性和迭代器的效率都取决于你的顶点容器。

vectorS为例,顶点描述符只是向量中顶点的索引,所以在容器中查找和在向量中索引一样快。在这个实例中,描述符和迭代器一样不稳定,插入&删除会导致元素移动。

对于listS,我期望(读:'guess')描述符是元素的地址,因此描述符和迭代器可能具有相同的稳定性保证。在这种情况下,使用顶点描述符访问属性可能和使用迭代器一样有效。

有关adjacency_list迭代器/描述符稳定性的更多信息,请参阅本页迭代器和描述符稳定性/无效部分。考虑到性能问题,您最好对两者进行分析以进行比较,并且只有当它似乎是应用程序中的瓶颈时才这样做。

最新更新