使用 std::unordered_map<int, int> 而不是 std::map<int, int> 有意义吗?

Does it make sense to use std::unordered_map<int, int> instead of std::map<int, int>?

本文关键字:int std gt lt map 有意义 unordered 使用      更新时间:2023-10-16

std::unordered_map<int, int>应该比std::map更快吗?我不在乎顺序,只关心快速查找,所以我认为我应该使用哈希表。但后来我想也许它会尝试另外散列我的密钥或类似的东西(我不需要(?

还有一个相关的问题:我需要通过int键检索int值。我应该使用 unordered_map<int, int> 还是 unordered_set<pair<int, int> >(在这种情况下,我需要为我的对正确实现哈希函数(?

map<T,K>unordered_map<T,K>之间的区别在于,第一个实现依赖于树,而第二个实现依赖于哈希映射。

这意味着基本操作(获取和设置(的复杂性对于map是对数的,对于unordered_map是常数。

在任何情况下还有其他方面:当达到负载因子时,unordered_map可能需要重新散列(这需要时间并且可能是不可预测的(,而正常map不涉及此类问题。此外,unordered_map 实现可以使用与存储桶的分离链接,因此如果碰巧发生许多冲突,则检索密钥的复杂性将变为恒定+线性。

我建议您使用一些具有类似于您需要的模式的数据对这两种结构进行基准测试,这将使您做出选择。

您无需为unordered_map定义自己的hash<int>,因为它已经实现。

相关文章: