У меня есть данные, которые однозначно идентифицируются комбинацией из 3 целых чисел.Оператор сравнения для Структурный ключ в таблице карт C++
Например:
Пункт # 1: 10,20,1
Пункт # 2: 10,21,0
Пункт # 3: 0,14,13
Пункт # 4: 103,324,78
Моя структура:
struct structureKeyID
{
int keyA;
int keyB;
int keyC;
// Comparison operator for table sorting.
bool operator<(const structureKeyID& param) const
{
if (keyA < param.keyA) return true;
if (keyB < param.keyB) return true;
if (keyC < param.keyC) return true;
return false;
}
};
map <structureKeyID, classDataRecord> tableRecords;
Я нашел, если добавить ключ (0,0,1):
structureKeyID keyID1;
keyID1.keyA = 0;
keyID1.keyB = 0;
keyID1.keyC = 1;
tableRecords[keyID1] = <data>;
я затем проверить, если ключ (0,1,0) существует:
structureKeyID keyID2;
keyID1.keyA = 0;
keyID1.keyB = 1;
keyID1.keyC = 0;
if (tableRecords.find(keyID2) != tableRecords.end())
Тогда я получаю сообщение об ошибке:
Debug Assertion Failed!
\include\xtree Line: 1268
Expression: invalid operator
В то время как, если я проверить, если ключ (0,0,2) или если ключ (10,0,2) существует, он отлично работает.
Каков правильный способ построения оператора сравнения для этой ситуации?
спасибо!
Это может быть полезно http://stackoverflow.com/questions/16340680/creating-a-composite-type-from-two-enum-classes-ready-for-stl-map/16341009#16341009, который использует ' станд :: tie'. Если у вас нет C++ 11, доступен 'boost :: tie'. – hmjd