首页 文章

我应该使用迭代器或描述符来保持对边或顶点的引用吗?

提问于
浏览
2

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

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

我想在迭代器的情况下,对象访问速度更快,但迭代器可以通过图形结构的动态变化无效 .

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

这是真的吗?

1 回答

  • 3

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

    例如,对于 vectorS ,顶点描述符只是向量中顶点的索引,因此容器中的查找与索引到向量一样快 . 描述符与此实例中的迭代器一样不稳定,因为插入和删除可能导致元素移动 .

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

    有关 adjacency_list iterator / descriptor稳定性的更多信息,请阅读this页面上 Headers 为 Iterator and Descriptor Stability/Invalidation 的部分 . 考虑到性能问题,您最好将2进行分析以进行比较,并且只有当它看起来是您应用程序中的瓶颈时才是如此 .

相关问题