Я хочу использовать std::multimap
, чьи ключи и значения имеют тип GUID
. Для этого мне нужно было определить оператор сравнения. Вот related question.Проблема с count() и 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
.