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

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

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

相反,描述符是一个 id,这意味着搜索是检索数据所必需的,但在图形更改的情况下可能不太容易触发内存错误。

这是真的吗?

最佳答案

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

例如,对于 vectorS,顶点描述符只是向量中顶点的索引,因此在容器中查找与索引向量一样快。在这种情况下,描述符与迭代器一样不稳定,因为插入和删除会导致元素四处移动。

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

有关 adjacency_list 迭代器/描述符稳定性的更多信息,请阅读 this 页面上标题为 迭代器和描述符稳定性/失效 的部分。考虑到性能问题,您最好对 2 进行分析以进行比较,并且仅当它似乎是您的应用程序中的瓶颈时。

关于boost-graph - 我应该使用迭代器还是描述符来保持对边或顶点的引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14350721/

10-13 08:34