Domanda

Quando faccio un std::map<my_data_type, mapped_value>, quello che C ++ si aspetta da me è quello my_data_type ha il suo 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;
};

Il motivo è che puoi derivare operator> e operator== da operator<. b <a implica a> b, quindi c'è operator>. ! (a <b) &&! (b <a) significa che un non è né meno di b Né maggiore di ciò, quindi devono essere uguali.

La domanda è: perché il designer C ++ non ha richiesto operator== da definire esplicitamente? Ovviamente, operator== è inevitabile per std::map::find() e per rimuovere i duplicati dal std::map. Perché implementare 5 operazioni e chiamare due volte un metodo per non costringermi a implementare esplicitamente operator==?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top