std :: unordered_map中的所有键是否都保证具有相同的哈希值? 或者具有不同哈希值的密钥是否位于同一个存储桶中?
在同一个存储桶中是否意味着具有相同的哈希值?
答案 0 :(得分:6)
在同一个存储桶中是否意味着具有相同的哈希值?
没有。
哈希码是32位或64位数字,因此可能需要大量值,但无序容器没有数十亿个桶。它将有N个桶并将数十亿可能的代码映射到这些N桶中的一个。
通常,它将使用模数运算符(%
)将哈希码减少为较小的值,该值用作存储桶数组的索引。
因此,如果有13个存储桶,则存储桶中的每个元素将具有模13的相同哈希码,但不一定是相同的哈希码。
load_factor和max_load_factor成员可用于查询和控制“加载因子”,该加载因子描述每个桶的平均元素数。较高的加载因子意味着具有不同哈希码的元素更有可能最终在同一个桶中(因为hash%N
值分布的桶数较少)。
答案 1 :(得分:0)
不,任何地方都无法保证。
Unordered_map 具有 bucket_size 功能,它返回特定存储桶中的元素数量:
http://www.cplusplus.com/reference/unordered_map/unordered_map/bucket_size/
此函数可以返回大于1的值,这意味着不同的元素可以转到同一个桶中。