【发布时间】:2011-03-21 13:48:48
【问题描述】:
我想使用std::multimap,其键和值的类型为GUID。为此,我需要定义比较运算符。这是related question。
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) 与我确定在multimap 中的GUID 元素一起使用时,我将迭代器获取到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的那部分。
【问题讨论】: