int数组的c ++哈希函数

gew*_*izz 11 c++ hash

我需要专门化哈希函数,unordered_map所以我可以使用int数组作为键.例如int array = {0, 1, 0, 1},数组值通常为0或1 ,但在技术上不受限制.

在这种情况下,有人会推荐一个好的哈希函数吗?或者,我总是可以将int数组转换为字符串并避免专门化.但我担心性能,因为我可能有几百万个这样的阵列.

seh*_*ehe 6

C++ TR1包含一个哈希模板函数.

如果还没有,可以使用Boost Hash.

一个方便帮手的想法:

#include <boost/functional/hash.hpp>

template <typename T, int N>
    static std::size_t hasharray(const T (&arr)[N])
{
     return boost::hash_range(arr, arr+N);
}
Run Code Online (Sandbox Code Playgroud)

这将(大致?)相当于

 size_t seed = 0;
 for (const T* it=arr; it!=(arr+N); ++it)
     boost::hash_combine(seed, *it);
 return seed;
Run Code Online (Sandbox Code Playgroud)

如果您使用此哈希进行查找,请不要忘记实现正确的相等比较操作


vro*_*nov 5

尝试使用lookup8哈希函数.这个功能非常快速而且很好.

int key[100];
int key_size=10;
for (int i=0;i<key_size;i++) key[i]=i; //fill key with sample data
ub8 hash=hash((ub8*)key, sizeof(key[0])*key_size, 0);
Run Code Online (Sandbox Code Playgroud)

  • 通常哈希函数用普通c编写.您可以为它创建C++包装器. (9认同)
  • 通常,哈希函数是用*语言*编写的. (2认同)
  • 你总是编写像crc32,sha,md5这样的函数,还是使用现有的经过良好测试和高性能的实现?:) (2认同)