我想说
std::hash_map<GUID, int> foo;
我相信要做到这一点我必须创建一个
bool operator < (const GUID &guid1, const GUID &guid2);
std::size_t hash_value(GUID const &b);
比较 GUID 的正确方法是什么? (memcmp?) - 生成散列的正确方法是什么?
如果有人能充实这两个功能那就太好了,我已经阅读了几十篇文章,除了提供最后的线索之外,所有的事情都做了 :-)
最佳答案
来自 documentation似乎:
typedef struct _GUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
大概有几种可能
构建您自己的
为了比较,我会逐项进行比较
bool operator < (const GUID &guid1, const GUID &guid2) {
if(guid1.Data1!=guid2.Data1) {
return guid1.Data1 < guid2.Data1;
}
if(guid1.Data2!=guid2.Data2) {
return guid1.Data2 < guid2.Data2;
}
if(guid1.Data3!=guid2.Data3) {
return guid1.Data3 < guid2.Data3;
}
for(int i=0;i<8;i++) {
if(guid1.Data4[i]!=guid2.Data4[i]) {
return guid1.Data4[i] < guid2.Data4[i];
}
}
return false;
}
对于散列...我会选择 UuidHash函数(请注意,GUID 是 UUID 的一种形式,如 UUID definition 中所示)
回到字符串
使用 StringFromCLSID从 GUID 中获取字符串...一旦有了字符串,您就拥有了所有运算符。
...这可能更贵。
关于c++ - 使用 GUID 作为 std::hash_map 中的键的 "right"方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113864/