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

时间:2013-01-16 03:00:47

标签: boost-graph

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

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

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

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

是真的吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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