c++ - 什么数据结构通常用于hold to hash table for a hashmap

标签 c++ algorithm hash hashmap

我知道检索哈希键的复杂度为 O(1),而键又可以指向实际数据。

我不明白的是,对于任意数量的可能哈希值,我们通常如何存储哈希值。在我看来,这本身应该是一个允许稀疏值支持键值对的数据结构,例如 std::map 并且不能用 std:vector 完成。

我在这里想说的是,如果你有一个 32 位的 hasCode,当几乎所有行都指向 NULL 时,你不可能从一开始就保留那个大小的数组,因为可能没有足够的数据。

最佳答案

哈希键通常存储在数组或其他支持对其元素进行 O(1) 随机访问的结构中。向哈希表中添加更多元素时,结构的大小会增加。发生这种情况时,每个键值对通常会重新散列。

为了在具有相对较窄范围的散列桶、模运算符%collision resolution strategy 的数组中存储大范围的散列键用来。为了减少碰撞次数,桶的数量设置为质数。这降低了 hashCode % bucketCount 将哈希码不均匀地引导到桶的可能性。

关于c++ - 什么数据结构通常用于hold to hash table for a hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642048/

相关文章:

c++ - Boost sub_match 抛出 std::length_error 异常

algorithm - 证明 n! = O(n^n)

c - 层次树打印所有后缀提供错误的输出

c++ - 通过迭代进行二叉搜索树后序遍历

algorithm - 将用户账号分配到N张表

jquery - 将外部内容加载到 div 中时的导航

perl - 比较两个混合类型的哈希值

c++ - 线程中 TCP 套接字的奇怪行为

c++ - 将 OpenCV kinect_maps 转换为 DLL

c++ - 对 vector 使用[] []运算符?