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