如何为与 Boost 兼容的 __uint128_t 类型实现哈希函数?
我试过这个:
#include <boost/functional/hash.hpp>
#include <unordered_set>
#ifdef USE_64
typedef uint64_t MyId; // works fine
#else
typedef __uint128_t MyId;
#endif
inline std::size_t hash_value (const MyId x)
{
// not a very good hash function, but I just want to get it working first!
return static_cast<std::size_t>(x);
}
int main (int argc, char *argv[])
{
std::unordered_set<MyId, boost::hash<MyId>> s;
s.insert(42);
}
但我在 64 位 Scientific Linux 6.2 上使用 g++-4.7.2 和 Boost v1.51.0 得到 144 行错误(!):
error: no matching function for call to 'hash_value(const __int128 unsigned&)'
任何指导将不胜感激。TIA。