迭代 unordered_map 的复杂度是多少

what is the complexity of iterating an unordered_map

遍历一个 unordered_map 使用带链接的散列实现的复杂性是多少?具体来说,这是否涉及遍历所有桶,在这种情况下,复杂度是 O(Buckets + NElements) 与理想情况相比,例如O(NElements)

What is the complexity of iterating through an unordered_map?

O(N) 其中 N 是存储的元素数。标准的most relevant part

All the categories of iterators require only those functions that are realizable for a given category in constant time (amortized). Therefore, requirement tables for the iterators do not have a complexity column.

您可以在例如

..implemented using hashing with chaining?

所有无序映射都使用散列和链接 - 参见

Specifically does this involve traversing all the buckets, in which case complexity is O(Buckets + NElements) vs. ideal, e.g. O(NElements)

它实现了您所说的“理想”。在 GCC 的情况下,桶将迭代器保存到一个单链表中,并且通常是在遍历容器时遍历更短的列表。通常是因为即使不更改默认的 max_load_factor() 1.0,桶的数量也可能恰好等于元素的数量 - 比这更多的元素将触发调整大小。但是,当几乎所有元素都被删除时,大 O 迭代效率变得更加重要,因为桶的数量不会自动向下调整大小(即减少)。