迭代 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 迭代效率变得更加重要,因为桶的数量不会自动向下调整大小(即减少)。
遍历一个 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 迭代效率变得更加重要,因为桶的数量不会自动向下调整大小(即减少)。