Когда я создаю std :: map
, C ++ ожидает от меня того, что my_data_type
имеет собственный оператор <
.
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;
};
Причина в том, что вы можете получить оператор>
и оператор ==
из оператора <
. b подразумевает a> b , поэтому есть оператор>
. ! (A означает, что a не меньше b и не больше его, поэтому они должны быть равны.
Возникает вопрос: почему разработчик C ++ не требует явного определения operator ==
? Очевидно, operator ==
неизбежен для std :: map :: find ()
и для удаления дубликатов из std :: map
. Зачем реализовывать 5 операций и дважды вызывать метод, чтобы не заставлять меня явно реализовывать operator ==
?