具有相同散列的值是否在std :: unordered_map的同一个桶中?

时间:2012-10-15 18:00:46

标签: c++ stl c++11

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

奖金问题:如果相同的散列并不意味着相同的存储桶,那么能够单独遍历存储桶的目的是什么?

1 个答案:

答案 0 :(得分:8)

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

23.2.5第8段:

  

无序关联容器的元素被组织到存储桶中。具有相同哈希码的密钥出现在同一个桶中。

奖金问题:为什么你想单独遍历水桶?

奖励回答:因为你想并行处理容器的内容。存储桶迭代器彼此独立,因此每个线程可以处理存储桶而不进行协调(前提是没有新的条目添加到容器中)。并且桶的大小应该大致相同,因此它们提供了方便的并行化量。

相关问题