使用迭代器循环STL映射与向量之间的性能差异是什么?我想使用map键进行插入,删除和一些访问,但我还需要定期访问地图中的每个元素。
答案 0 :(得分:19)
使用map和vector,遍历整个集合的是O(N)。然而(像list vs vector)vector会连续存储元素,因此访问下一个元素要便宜得多,因为它会最佳地使用缓存,而地图则不会。
但是由于你需要基于密钥进行查找,所以没有其他选择。你可以使用在第一个元素上排序的对向量,但如果集合需要是可变的,那么这将是非常慢的。只需使用地图。
答案 1 :(得分:9)
迭代地图的每个元素需要O(n)时间。 wikipedia
答案 2 :(得分:6)
This link在所有STL容器上有各种操作的性能表。
一般来说,如果您需要根据密钥进行大量插入,删除或搜索,那么地图就是您的选择。
如果您只需要设置容器一次,然后像数组一样访问它,那么使用矢量。
编辑:STL容器操作的性能表:
答案 3 :(得分:3)
答案 4 :(得分:2)
浏览树并不昂贵(grosso modo就像跟随链表一样),你不会从缓存中获益同样的向量,但通常你在迭代时所做的事情是昂贵的,而不是迭代本身
你能告诉我们更多关于你在迭代整个地图时的期望吗?
答案 5 :(得分:1)
如果您需要通过密钥快速访问方式,请使用地图。否则,请始终使用向量,除非使用分析器发现某些性能问题。