uuid.h
(package:uuid-dev)是否具有散列uuid_t
变量的任何函数?
如果它存在而不是滚动我自己,那将会更好。如果没有函数,对散列过程的任何建议都可以产生相对可靠的唯一结果吗?
#ifdef WIN32
#define GUID UUID
#define generateGUID UuidCreate // returns RPC_S_OK, RPC_S_UUID_LOCAL_ONLY, RPC_S_UUID_NO_ADDRESS
#define hashGUID(gUid) hash<long>()(gUid.Data1) ^ (hash<short>()(gUid.Data2) << 1) >> 1 ^ hash<short>()(gUid.Data3) << 1 ^ hash<char>()(gUid.Data4[0]) << 1
#else
#define GUID uuid_t
#define generateGUID uuid_generate_random
#define hashGUID(gUid) ???
#endif // WIN32
namespace std
{
template<>
struct hash<GUID>
{
std::size_t operator()(const GUID& gUid) const
{
using std::size_t;
using std::hash;
return hashGUID(gUid);
}
};
}
编辑用法:在std容器中作为键
std::unordered_map<GUID, Component> components;
答案 0 :(得分:0)
由于您想要哈希UUID以便将它们存储在哈希表中,我建议一些简单的事情:
std::size_t operator()(const GUID& gUid) const
{
const uint64_t* half = reinterpret_cast<const uint64_t*>(&gUid);
return half[0] ^ half[1];
}
以上假设您使用的是64位平台(因此uint64_t与size_t一样宽)。