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==?

Ответы на вопрос(5)

Ваш ответ на вопрос