STL映射与向量的迭代器访问性能?

时间:2009-04-08 15:22:26

标签: c++ performance stl map iterator

使用迭代器循环STL映射与向量之间的性能差异是什么?我想使用map键进行插入,删除和一些访问,但我还需要定期访问地图中的每个元素。

6 个答案:

答案 0 :(得分:19)

使用map和vector,遍历整个集合的是O(N)。然而(像list vs vector)vector会连续存储元素,因此访问下一个元素要便宜得多,因为它会最佳地使用缓存,而地图则不会。

但是由于你需要基于密钥进行查找,所以没有其他选择。你可以使用在第一个元素上排序的对向量,但如果集合需要是可变的,那么这将是非常慢的。只需使用地图。

答案 1 :(得分:9)

迭代地图的每个元素需要O(n)时间。 wikipedia

答案 2 :(得分:6)

This link在所有STL容器上有各种操作的性能表。

一般来说,如果您需要根据密钥进行大量插入,删除或搜索,那么地图就是您的选择。

如果您只需要设置容器一次,然后像数组一样访问它,那么使用矢量。

编辑:STL容器操作的性能表:

enter image description here

答案 3 :(得分:3)

Iterating through a map may be linear but practically , it is not so efficient from the implementations in C++ . So my advice is to use a vector and use another map to locate the items in the vector in linear time .

答案 4 :(得分:2)

浏览树并不昂贵(grosso modo就像跟随链表一样),你不会从缓存中获益同样的向量,但通常你在迭代时所做的事情是昂贵的,而不是迭代本身

你能告诉我们更多关于你在迭代整个地图时的期望吗?

答案 5 :(得分:1)

如果您需要通过密钥快速访问方式,请使用地图。否则,请始终使用向量,除非使用分析器发现某些性能问题。