キーと値がGUID
のstd::multimap
を使用します。そのためには、比較演算子を定義する必要がありました。ここにはrelated questionがあります。std :: multimapのcount()とfind()の問題
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
要素をマルチマップに使用すると、マルチマップの最後の要素にイテレータが渡されます。つまり、指定された要素がマルチマップに見つかりません。
あなたは、どうしてこのことが起こっているのかを知っていますか?
どういうわけか私は構造体で定義した比較演算子に関連していると思います。後でマルチマップの構築に使用しますが、その理由はわかりません。また、ここGUID
型の定義されて:あなたが見ることができるように、私は比較関数でData1
、Data2
とData3
を
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
使用しましたが、私は任意の論理が表示されないので、Data4
char
配列を使用していませんでしたその部分を比較する方法GUID
。