gpt4 book ai didi

c++ - 使用 GUID 作为 std::hash_map 中的键的 "right"方法是什么

转载 作者:太空狗 更新时间:2023-10-29 23:51:05 24 4
gpt4 key购买 nike

我想说

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com