【发布时间】:2011-04-07 12:31:18
【问题描述】:
我使用 std::set<int> 作为标准映射 (std::unordered_map<std::Set<int>,float>) 的键。我需要这个集合的哈希值。
集合总是只有两个整数,其值最多可达 200 万。
对于像性能这样关键的键,有什么好的快速散列的想法吗?
【问题讨论】:
-
我理解正确吗?您正在使用
std::set作为TR1:unordered_map的密钥? -
如果只有两个整数,为什么不用
std::pair<int, int>作为key呢? -
我认为如果我使用一对,就我的目的而言,我会遇到问题 (a,b) == (b,a) 但如果使用一对这将不是真的(我假设) .当我使用集合时,因为整数是排序的,所以我在查找时不会意外错过地图中的任何值
-
无论如何,据我所知,整数对没有内置哈希函数,所以问题不是差不多吗?
-
好又快的哈希?按位
|或^?由于您使用的是集合,因此您可以通过位移第一个值或与不同的种子异或来做一些愚蠢的事情......但散列函数往往取决于值的底层分布。