std::unordered_map<int, int>
比std::map
更快吗?我不关心顺序,只关心快速查找,所以我认为应该使用散列表。但是我想也许它会尝试额外地对我的键进行哈希处理或类似的操作(这并不需要)?相关问题:我需要通过 key检索值。我应该使用
unordered_map<int,int>
还是unordered_set<pair<int,int>>
(如果这样的话,我需要正确实现对我的pair的哈希函数)?std::unordered_map<int, int>
比std::map
更快吗?我不关心顺序,只关心快速查找,所以我认为应该使用散列表。但是我想也许它会尝试额外地对我的键进行哈希处理或类似的操作(这并不需要)?unordered_map<int,int>
还是unordered_set<pair<int,int>>
(如果这样的话,我需要正确实现对我的pair的哈希函数)?map<T,K>
和unordered_map<T,K>
之间的区别在于前者依赖于树,而后者依赖于哈希表。map
的时间复杂度为对数级别,而unordered_map
的时间复杂度为常数级别。unordered_map
可能需要重新哈希(这需要时间并且不可预测),而普通的map
则不存在这样的问题。此外,unordered_map
实现可能使用分离链接和桶,因此如果出现许多冲突,则检索键的复杂度将变为常数+线性级别。unordered_map
定义自己的hash<int>
,因为它已经被实现了。
2<<(sizeof(int)*8)
,这样每个int值才能被映射到自己的单元格,否则您并没有为哈希映射表提供哈希值。但在这种情况下,一个int[2<<(sizeof(int)*8)]
数组就足够了。而问题将与数据缓存有关,而不再是数据结构的性能问题。 - Jackunordered_map
提供自己的哈希函数。但是,在这样做之前,请务必了解其中的陷阱和注意事项。 - rwong