【问题标题】:Unordered_map or hashMap existing hash function modify?Unordered_map 或 hashMap 现有散列函数修改?
【发布时间】:2020-10-19 07:07:09
【问题描述】:

我使用了 unordered_map 键的值可能高达 1e9,这导致我的答案是超过时间限制。

当我使用 map 时,它是成功的。

我从其他答案中了解到 unordered_map 在散列函数不好时是不好的,有没有办法改变这个 unordered_map 的散列函数

【问题讨论】:

  • long long int 的标准哈希函数似乎不太可能是坏的,map 更不可能更好。我认为您的问题可能是由其他问题引起的。

标签: c++ stl hashmap unordered-map


【解决方案1】:

是的,您可以这样做。

std::unordered_map的第三个模板参数是要使用的哈希函数,它应该是满足here列出的要求的函子。

【讨论】:

【解决方案2】:

我认为这可能还有其他原因。

如果插入和删除查找多,那么map 更快。但是,如果有更多的查找,那么unordered_map 应该会提供性能提升。

看看这个: https://stackoverflow.com/questions/2196995/is-there-any-advantage-of-using-map-over-unordered-map-in-case-of-trivial-keys#:~:text=map%20just%20has%20a%20few,it%20lacks%20the%20large%20array.

PS:您能否分享一下这个问题,以获得更深入的了解?

【讨论】:

  • “如果与查找相比有更多的插入和删除,那么 map 会更快。但是,如果有更多的查找,那么 unordered_map 应该会提供性能提升。” ——这太冒昧了;很大程度上取决于键的冲突倾向、使用的散列函数、散列表的大小(例如 GCC 倾向于使用素数大小、Visual C++ 2 的幂)、CPU/内存/缓存架构属性、存储的值的数量......参见也 stackoverflow.com/a/3999891/410767 用于与此相矛盾的硬统计数据。
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多