Я пытаюсь использовать компаратор для сравнения ключей карты.
std::map<SomePointer,SomeValue, SomeComparator> testMap;
class SomeComparator
{
SomeComparator( ){ }
bool operator()( const SomePointer& sp1, const SomePointer& sp2) const
{
return sp1 == sp2;
}
}
Мой вопрос заключается в том, нужно ли мне перегружать operator () или что-то еще, чтобы позволить map :: find использовать соответствующий компаратор для сравнения двух указателей и получения совпадающего.
Для карты вам необходимо предоставить <
Тип сравнения — «строгий слабый порядок», если быть точным. Он выводит равенство, когда A не меньше, чем B, а B не меньше, чем A.
Но, чтобы ответить на вопрос, который вы фактически задали: если вы предоставляете функтор компаратора, как указано выше, вы перегружаете operator()
для этого функтора. В противном случае вы можете перегрузить operator<
для вашего типа ключа.
Других решений пока нет …