我想用std::multimap
,其键和值都是GUID
型。为此,我需要定义比较运算符。这里是related question。问题的计数()和find()中的std :: multimap中
struct GUIDPairsComparer
{
bool operator()(const GUID &left, const GUID &right) const
{
if (left.Data1 < right.Data1)
return true;
if (left.Data2 < right.Data2)
return true;
if (left.Data3 < right.Data3)
return true;
return false;
}
};
Class A{
private:
multimap<GUID, GUID, GUIDPairsComparer> myMap;
multimap<GUID, GUID, GUIDPairsComparer>::iterator it_myMap;
public:
FunctionUsingMultiMap(){...}
};
但是,我使用myMap.count(GUID x)
和myMap.find(GUID x)
时有困难。 使用myMap.count(GUID x)
产生异常,而当我用myMap.find(GUID x)
与GUID
元素,我知道肯定是在multimap中,我得到的迭代器在多重映射的最后一个元素,这意味着给定的元素是不是在multimap中找到。
你以任何方式,有一个线索,为什么会出现这种情况?
不知怎的,我认为这是关系到我在这之后,我使用多重映射建筑结构定义比较操作,但我完全不知道为什么。另外这里的GUID
类型的定义:
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
正如你所看到的,我在比较功能使用Data1
,Data2
和Data3
,但没有使用Data4
char
阵列,因为我没有看到任何逻辑办法比较的GUID
部分。