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

How should I define my own hash function for unordered_map in C++

本文关键字:unsodered 自己的 map 函数 哈希 我自己 定义 C++ 我应该      更新时间:2023-10-16

我有一个图像补丁数据库,即300*300个图像,每个补丁的大小为60*60。因此给了我一个5*5的网格。我想针对每个补丁存储一些信息。由于我的数据库可以由数百万张图像组成,所以我想使用unordered_map,这样就可以很容易地找到补丁。

我的补丁信息包括imgId、补丁的x_position和补丁的y_position(均为整数)。我对undered_map没有太多经验。但通过一些教程,我意识到我将不得不使用自己的哈希函数。有人能提出一些有效的方法,用适当的哈希函数将上述信息存储在无序映射中吗。

您可以使用任何您喜欢的哈希函数来组合这三个整数。这里有一个经典的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;
}