6

如果 std::unordered_map 的两个键具有相同的哈希值,标准是否保证它们将进入同一个存储桶?我们假设根据模板相等谓词,键不相等,它们只有相同的哈希值。

额外的问题:如果相同的哈希并不意味着相同的桶,那么能够单独遍历桶的目的是什么?

4

1 回答 1

8

具有相同散列的对象被无序的关联容器放入同一个桶中。因此,两个相等的对象必须具有相同的散列。

23.2.5 第 8 段:

无序关联容器的元素被组织成桶。具有相同哈希码的键出现在同一个桶中。

额外问题:为什么要单独遍历存储桶?

奖励答案:因为您想并行处理容器的内容。桶迭代器彼此独立,因此每个线程可以在没有协调的情况下处理桶(假设没有新条目添加到容器中)。并且桶的大小应该大致相同,因此它们提供了方便的并行化量。

于 2012-10-15T18:04:38.387 回答