2012-11-10 2 views
2

Я использую свой собственный класс как ключевой тип для std :: map. Как реализация карты определяет, когда два объекта равны?C++ STL map :: find()

Я знаю, что я могу определить оператора < или тип Comp для размещения элементов. Но я ничего не могу найти о равенстве.

+2

'! (A chris

+1

@chris Это ответ, а не комментарий :) – dasblinkenlight

ответ

4

Это можно сделать, используя только operator<, поэтому вам не нужно определять operator==. В принципе, если один не меньше другого, а другой не меньше первого, они должны быть равны. Это возможная полезность реализация функции такие:

bool isEqual(const Type &arg1, const Type &arg2) const { 
    return !(arg1 < arg2) && !(arg2 < arg1); 
} 
4

std::map<K, V, Comp> класса фактически не определяет, если объекты равны! Все это заботится о том, если два объекта являются частью одного и того же класса эквивалентности, который он определяет, используя

Comp comp; 
if (!comp(a, b) && !comp(b, a)) { 
    // a and b are in the same equivalence class 
} 

определение по умолчанию Compo является std::less<K>, то есть класс определяет эквивалентность, как ни объект, чтобы быть меньшим, чем другой.

+0

Ах, я забыл о возможности выбора сравнения. Это всегда хорошо. – chris

Смежные вопросы