Std :: Requisiti della mappa per le chiavi (decisione di progettazione)
-
11-11-2019 - |
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