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 被卡