Я хочу использовать std::multimap
, ключи и значения которого имеют тип GUID
.Для этого мне нужно было определить оператор сравнения.Вот вопрос, связанный с .
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
:
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
Как видите, я использовал Data1
, Data2
и Data3
в функции сравнения, но не использовал *Массив 1023 * char
, поскольку я не вижу логического способа сравнить эту часть GUID
.