Когда я создаю std::map<my_data_type, mapped_value>
, то, что С++ ожидает от меня, состоит в том, что my_data_type
имеет свой собственный operator<
.
struct my_data_type
{
my_data_type(int i) : my_i(i) { }
bool operator<(const my_data_type& other) const { return my_i < other.my_i; }
int my_i;
};
Причина в том, что вы можете получить operator>
и operator==
из operator<
. b < a следует a > b, поэтому там operator>
.! (a < b) & &! (b < a) означает, что a не меньше b и не больше, поэтому они должны быть равны.
Возникает вопрос: почему разработчик С++ не требует явного определения operator==
? Очевидно, operator==
неизбежно для std::map::find()
и для удаления дубликатов из std::map
. Зачем реализовывать 5 операций и дважды вызывать метод, чтобы не заставить меня явно реализовать operator==
?