【发布时间】:2010-10-18 08:19:08
【问题描述】:
使用迭代器遍历 STL 映射与使用向量之间的性能差异是什么?我想使用 map 键进行插入、删除和一些访问,但我还需要对 map 中的 每个 元素进行常规访问。
【问题讨论】:
标签: c++ performance stl map iterator
使用迭代器遍历 STL 映射与使用向量之间的性能差异是什么?我想使用 map 键进行插入、删除和一些访问,但我还需要对 map 中的 每个 元素进行常规访问。
【问题讨论】:
标签: c++ performance stl map iterator
遍历映射可能是线性的,但实际上,从 C++ 中的实现来看,它的效率并不高。所以我的建议是使用向量并使用另一个地图在线性时间内定位向量中的项目。
【讨论】:
This link 为所有 STL 容器上的各种操作提供了一个很好的性能表。
一般来说,如果您需要根据一个键进行大量插入、删除或搜索,那么地图就是最佳选择。
如果您只需要设置一次容器,然后像数组一样访问它,那么请使用向量。
编辑:STL 容器操作性能表:
【讨论】:
map 与vector 相比更有效,分别用于删除和循环迭代?”跨度>
使用 map 和 vector,遍历整个集合是 O(N)。但是(就像列表与向量一样)向量连续存储元素,因此访问下一个元素要便宜得多,因为它会以最佳方式使用缓存,而地图不会。
但由于您需要根据键进行查找,因此没有其他选择。您可以使用按第一个元素排序的对向量,但如果集合需要是可变的,这将非常慢。只需使用地图。
【讨论】:
浏览树并不昂贵(像跟随链表一样的大模式),使用向量不会从缓存中受益太多,但通常这是您在迭代时所做的事情,而不是迭代本身.
您能否告诉我们更多关于您在遍历整个地图时期望做什么?
【讨论】:
遍历地图的每个元素需要 O(n) 时间。 wikipedia
【讨论】:
如果您需要通过钥匙快速访问,请使用地图。否则一直使用向量,除非探查器会发现一些性能问题。
【讨论】: