unordered_map存储桶中的所有元素是否具有相同的哈希值
Do all elements in a bucket of an unordered_map have the same hash?
std::unordered_map中的所有键是否保证具有相同的哈希?或者具有不同哈希的键可以驻留在同一个存储桶中吗?
在同一个存储桶中是否意味着具有相同的哈希值?
在同一个存储桶中是否意味着具有相同的哈希值?
不。
哈希代码是 32 位或 64 位数字,因此可以采用大量值,但无序容器没有数十亿个存储桶。它将有 N 个存储桶,并将数十亿个可能的代码映射到其中 N 个存储桶之一。
通常它会使用模运算符(%
(将哈希代码减少到一个较小的值,用作桶数组的索引。
那么存储桶中的每个元素将具有相同的哈希码模 13,但不一定具有相同的哈希代码。
load_factor 和 max_load_factor 成员可用于查询和控制"负载系数",该"负载系数"描述了每个存储桶的平均元素数。较高的负载系数意味着具有不同哈希代码的元素更有可能最终位于同一存储桶中(因为hash%N
值分布的存储桶较少(。
不,在任何地方都不能保证。
Unordered_map 具有函数 bucket_size,它返回特定存储桶中的元素数:
http://www.cplusplus.com/reference/unordered_map/unordered_map/bucket_size/
此函数可以返回大于 1 的值,这意味着不同的元素可以转到同一个存储桶。
相关文章:
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 如何知道地图中的最后一个元素是否被删除?
- 检查 TinyXML 中的元素是否存在
- 使用 at() 访问 std::map 元素是否比运算符 [] 慢?
- 在迭代期间添加到 std::unordered_set(或 unordered_map)中的元素是否会在迭代期间访问?
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 通过引用访问矢量元素是否会降低C++的空间复杂性?
- 检查HTML 5视频元素是否正在获取帧
- 在c++中,如何检查一个数组的元素是否也是另一个数组中的元素
- 是否有更有效的方法来检查元素是否在给定的区间内
- 如何检查数组的 3 个元素是否具有相同的值
- 整数指针数组的元素是否可以指向整数数组?
- 在 new 关键字中,由默认构造函数初始化的类中的元素是否也使用 new 关键字在C++?
- 写入多维矢量子级中的元素是否安全?
- 使用容器中元素的别名删除带有 std::list::remove 的元素是否正确?
- 如何确定向量的元素是否交替为符号?
- 如何查看矢量中的所有元素是否相同?
- 从标准容器中移动元素是否合法?
- 如何检查 std::vector<std::string> 的元素是否以某个子字符串开头?