std :: unordered_multimap的存储桶是否仅包含具有等效键的元素

lan*_*ery 3 c++ unordered-map std

在www.CPlusPlus.com上,它说明了unordered_multimap的以下内容,

具有等效键的元素在同一个桶中组合在一起,并且迭代器(请参阅equal_range)可以遍历所有这些元素.

我知道我们无法从该语句中推断出这一点,但我想知道给定的存储桶是否只包含具有等效键的元素?

Lig*_*ica 5

以下是唯一相关的要求:

[C++11: 23.2.5/5]:如果容器的函数对象在传递这些值时返回true,则认为两个值k1和k2类型Key是等效的key_equal.如果k1和k2是等价的,散列函数应返回两个相同的值.[..]

[C++11: 23.2.5/8]:无序关联容器的元素被组织成桶.具有相同哈希码的密钥出现在同一个存储桶中.[..]

没有任何东西禁止所有带密钥哈希的元素a和所有带密钥哈希的元素b存储在同一个桶中.您可以使用标准库实现来判断是否使用了此事实.

没有标准的措辞来明确这一点; 它是由遗漏定义的.

  • @praetorian一个典型的`unordered_`实现将在内容大小增加时创建新的桶.由于运气不好,散列函数较差或者所有散列值都相同(在您的情况下),所有元素仍然可以在同一个桶中结束. (3认同)