C++ MurmurHash3 为不同的键返回相同的值
C++ MurmurHash3 returning same value for different key
我很困惑,当我有很多键值时,我应该如何调用 MurmurHash3_x86_128()。可以找到 murmurhash3 代码 https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp。方法定义如下。
void MurmurHash3_x86_128 ( const void * key, const int len,
uint32_t seed, void * out )
我正在使用 for 循环传递不同的键值,如下所示,但哈希值 return 仍然相同。如果我要删除 for 循环并传递单个键值,则该值不同。我做错了什么?
int main()
{
uint64_t seed = 100;
vector <string> ex;
ex.push_back("TAA");
ex.push_back("ATT");
for(int i=0; i < ex.size(); i++)
{
uint64_t hash_otpt[2]= {};
cout<< hash_otpt << "\t" << endl;
const char *key = ex[i].c_str();
cout << key << endl;
MurmurHash3_x64_128(key, strlen(key), seed, hash_otpt); // 0xb6d99cf8
cout << hash_otpt << endl;
}
return 0;
行
cout << hash_otpt << endl;
发出 hash_otpt
的 地址 ,而不是它的内容。
应该是
cout << hash_otpt[0] << hash_otpt[1] << endl;
基本上,128 位哈希被拆分并存储在两个 64 位无符号整数中(一个是 MSB,另一个是 LSB)。将它们结合起来,您将获得完整的哈希值。
我很困惑,当我有很多键值时,我应该如何调用 MurmurHash3_x86_128()。可以找到 murmurhash3 代码 https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp。方法定义如下。
void MurmurHash3_x86_128 ( const void * key, const int len,
uint32_t seed, void * out )
我正在使用 for 循环传递不同的键值,如下所示,但哈希值 return 仍然相同。如果我要删除 for 循环并传递单个键值,则该值不同。我做错了什么?
int main()
{
uint64_t seed = 100;
vector <string> ex;
ex.push_back("TAA");
ex.push_back("ATT");
for(int i=0; i < ex.size(); i++)
{
uint64_t hash_otpt[2]= {};
cout<< hash_otpt << "\t" << endl;
const char *key = ex[i].c_str();
cout << key << endl;
MurmurHash3_x64_128(key, strlen(key), seed, hash_otpt); // 0xb6d99cf8
cout << hash_otpt << endl;
}
return 0;
行
cout << hash_otpt << endl;
发出 hash_otpt
的 地址 ,而不是它的内容。
应该是
cout << hash_otpt[0] << hash_otpt[1] << endl;
基本上,128 位哈希被拆分并存储在两个 64 位无符号整数中(一个是 MSB,另一个是 LSB)。将它们结合起来,您将获得完整的哈希值。