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

iterators in Unordered (or Hash) Maps

本文关键字:映射 迭代器 无序      更新时间:2023-10-16

据我所知,hashmap比标准映射更可取,因为您可以在接近0(1)的时间内找到元素。这是通过使用散列或键作为数组查找来完成的。然后我们解决任何冲突并取出值。

这对于查找非常有效,但是如果我们进行哈希查找的数组空间是稀疏填充的,那么hashmap/unorderedmap如何有效地迭代hashmap中的所有元素而不耗尽我们的数组空间?

编辑:然而Boost, SGI和c++ 11 hashmap/无序映射有迭代器,那么它们是如何工作的?

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

所以如果你的桶非常稀疏,这个可以成为一个因素。这就是为什么您不希望选择高的bucket count(较大的那个显然会浪费内存)的原因之一。

迭代为O(n),其中n为映射的容量(即桶的数量)。但通常,你不应该有100000的容量来存储6个键。这意味着O(大小)应该是O(容量),这意味着迭代通常也是O(大小)。