无序(或散列)映射中的迭代器

时间:2011-08-31 10:24:26

标签: java c++ hashtable unordered-map

据我了解,Hashmaps优于标准地图,因为您可以在接近O(1)时间内找到元素。这是通过使用散列或键作为数组查找来完成的。然后我们解决任何冲突并取出值。

这适用于查找,但如果我们进行哈希查找的数组空间是稀疏填充的,那么hashmap / unorderedmap如何有效地迭代我们的hashmap中的所有元素而不会彻底地遍历我们的数组空间? / p>

编辑:但Boost,SGI和C ++ 11哈希映射/无序映射都有迭代器,那么它们如何工作?

2 个答案:

答案 0 :(得分:2)

除非存在并行结构(例如LinkedHashMap中的链接列表),否则它不能:迭代将需要检查每个存储桶的内容。

因此,如果您的存储桶非常稀疏填充,则此可以成为一个因素。这就是为什么你不想选择高的存储桶数量的原因之一(显然更大的存储器浪费了内存)。

答案 1 :(得分:1)

迭代是O(n),其中n是地图的容量(即桶的数量)。但通常情况下,您不应该有100000的容量来存储6个密钥。这意味着O(大小)应该是O(容量),这意味着迭代通常也是O(大小)。