c++ - std::unordered_map 如何确定哈希表中特定键的位置?

文档提到 std::unordered_map 使用哈希表。它如何实现对哈希表中特定键的 O(1) 查找?我能想到的唯一方法是将每个键存储在一个地址,该地址是根据它所持有的数据的哈希值计算得出的。如果是这种情况,它如何将所有 key 在内存中保持在一起,以免很快用完?此外,如果使用多个 std::unordered_map 怎么办?该实现如何保证没有两个映射会计算归结为同一地址的哈希值?

最佳答案

O(1) 并不意味着算法的复杂性是“一次性”,或者在这种情况下, map 中的值必须通过某种形式的单次查找来检索,基于它的 key 。

O(1) 的真正意思是 O(amortized constant),即:它需要固定的时间才能完成,平均而言

无序映射的一种可能实现方式是哈希表,其中包含具有相同哈希键的所有值的链表,无序映射会根据需要动态调整哈希表的大小。偶尔的 map 查找完全有可能必须搜索一个小链表才能找到正确的哈希键。此外,偶尔,插入或删除操作会花费额外的时间来重新散列整个无序映射。

如果您在引用资料中查找无序映射方法的详细信息,您会发现它明确提到如果修改触发重新散列,则无序映射的所有现有方法都会失效。

但是,平均,预计无序 map 查找将花费固定的时间。

https://stackoverflow.com/questions/70621067/

相关文章:

reactjs - 为什么箭头函数可以工作但常规函数不能 React JS

c - 如何跟踪全局变量重新定义问题的链接器问题

c++ - 如何检查两个数组或列表是否相同?

r - 如何根据特定行的比较来消除变量

kotlin - 为什么 Kotlin 不提示歧义?为什么要调用辅助构造函数?

python - 如何阻止 Selenium 在执行期间关闭驱动程序?

go - 我应该如何使用 protoc-gen-go-grpc?

html - 使用圆形元素的饼图

r - 如何通过合并 csv 文件创建数据框,然后基于它创建 Shiny 的应用程序?

r - 有没有一种方法可以将列添加到函数形式的数据框中