什么是成对的快速哈希函数?

时间:2014-05-29 12:22:14

标签: c++ algorithm hash

我试图找出一个快速数据类型来存储整数对,其中API只是add, remove and isMember。考虑isMember必须快,显而易见的想法是使用哈希映射。散列函数主要用于无界字符串,因此,我的问题是:考虑我想要散列的内容只是一对整数,什么是具有良好碰撞属性的快速散列函数?

2 个答案:

答案 0 :(得分:1)

对于一对EndPoint,您可以使用Szudzik's Function。它“优雅地”将两个自然数配对为一个唯一的数。

由于您提到了int,因此它也可以是负数。在这种情况下,请对正,负,负,负负对使用不同的哈希图。

答案 1 :(得分:0)

您可以获得的最佳效果是使用long long的哈希函数(例如,内置C++)并使用(p.first * (INT_MAX + 1) + p.second)。这在c++11中可以很好地工作,并且hash_map的大多数常见实现都有long long的哈希函数,如果这不可用,您可以使用(((long long)p.first * prime1) + (long long)p.second) % prime2其中prime1 1}}和prime2是适合整数的素数。

相关问题