我知道检索哈希键的复杂度为 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/