当我发现一个非常有趣的哈希函数时,我正在查看 stackoverflow 上的哈希函数。它涉及将 const char* 强制转换为 size_t*,然后取消引用 size_t。然后将其位移到一定的精度。这适用于 const char*,每次都产生相同的值。但是,当我使用实际的字符串类型并调用 c_str() 时,生成的两个值不匹配。此外,在代码的每次运行中,字符串每次运行都会产生不同的值。任何人都知道为什么会发生这种情况?
const string l = "BA";
const char* k = l.c_str();
const char* p = "BA";
cout << k << " " << *((size_t*)k) << endl;
cout << p << " " << *((size_t*)p) << endl;
运行 1:
BA 140736766951746
BA 7162260525311607106
运行 2:
BA 140736985055554
BA 7162260525311607106
原始问题:C++ 哈希表有一个好的哈希函数吗?