如何为__uint128_t实现自定义Boost哈希函数?

时间:2012-12-07 02:50:34

标签: c++ boost hash 64-bit

如何为与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。

0 个答案:

没有答案