我应该如何在C ++中为unordered_map定义自己的哈希函数

时间:2014-09-17 15:27:55

标签: c++ hash hashtable unordered-map

我有一个图像补丁数据库,即300 * 300图像,每个补丁大小为60 * 60。从而给我一个5 * 5的网格。我想针对每个补丁存储一些信息。由于我的数据库可以包含数百万个图像,因此我想使用unordered_map,以便找到补丁变得容易。

我的补丁信息包括imgId,补丁的x_position和补丁的y_position(所有整数)。我对unordered_map没有多少经验。但是通过一些教程,我意识到我将不得不使用自己的哈希函数。任何人都可以建议使用适当的哈希函数在unordered_map中存储上述信息的一种有效方法。

1 个答案:

答案 0 :(得分:0)

您可以使用任何您喜欢的哈希函数来组合三个整数。这是一个经典的Knuth 32位合并器:

int hash(int v1, int v2, int v3)
{
  int v = v1;
  v *= 2654435741;
  v += v2;
  v *= 2654435761;
  v ^= v3;
  v *= 2654435789;
  return v;
}