unordered_map存储桶中的所有元素是否具有相同的哈希值

Do all elements in a bucket of an unordered_map have the same hash?

本文关键字:元素 是否 哈希值 map 存储 unordered      更新时间:2023-10-16

std::unordered_map中的所有键是否保证具有相同的哈希?或者具有不同哈希的键可以驻留在同一个存储桶中吗?

在同一个存储桶中是否意味着具有相同的哈希值?

在同一个存储桶中是否意味着具有相同的哈希值?

不。

哈希代码是 32 位或 64 位数字,因此可以采用大量值,但无序容器没有数十亿个存储桶。它将有 N 个存储桶,并将数十亿个可能的代码映射到其中 N 个存储桶之一。

通常它会使用模运算符(%(将哈希代码减少到一个较小的值,用作桶数组的索引。

因此,如果有 13 个存储桶,

那么存储桶中的每个元素将具有相同的哈希码模 13,但不一定具有相同的哈希代码。

load_factor 和 max_load_factor 成员可用于查询和控制"负载系数",该"负载系数"描述了每个存储桶的平均元素数。较高的负载系数意味着具有不同哈希代码的元素更有可能最终位于同一存储桶中(因为hash%N值分布的存储桶较少(。

不,在任何地方都不能保证。

Unordered_map 具有函数 bucket_size,它返回特定存储桶中的元素数:

http://www.cplusplus.com/reference/unordered_map/unordered_map/bucket_size/

此函数可以返回大于 1 的值,这意味着不同的元素可以转到同一个存储桶。