unordered_map 如何在内部使用其哈希?

Posted

技术标签:

【中文标题】unordered_map 如何在内部使用其哈希?【英文标题】:How does unordered_map use its hash internally? 【发布时间】:2013-09-09 11:35:25 【问题描述】:

unordered_map如何在内部使用hash函数来访问属于某个key的bucket?

std::hash 返回一个 size_t 类型,它可能大于容器中存在的桶数。返回的哈希值如何映射到桶索引?

典型的 unordered_map 实现是按 size() 或 max_size() 对返回的哈希进行取模,还是会发生更复杂的事情?

【问题讨论】:

开玩笑的说;只要遵守标准,它就可以为所欲为。为什么不查看供应商的 stl 源代码? 【参考方案1】:

典型的 unordered_map 实现是按 size() 或 max_size() 对返回的哈希进行取模,还是会发生更复杂的事情?

几乎。模数是bucket_count(),因为这是哈希表中的桶数。

标准不要求这必须通过模运算来完成,只是bucket() 函数以某种方式将键值映射到[0,bucket_count) 范围,并且具有等效散列的键映射到同一个桶。散列的模数是最直接的方法。

【讨论】:

以上是关于unordered_map 如何在内部使用其哈希?的主要内容,如果未能解决你的问题,请参考以下文章

使用在内部结构定义中保存函数的类成员变量,这些函数将用作 unordered_map 对象的模板参数

哈希:它在内部是如何工作的?

unordered_map 哈希函数 / 如何防止 unordered_map 被卡

unordered_map<int,int> 如何处理负面元素?

C++哈希

C++哈希