Perché multimap consente coppie chiave-valore duplicate?

Perché multimap consente coppie chiave-valore duplicate?

Multimap ha solo un predicato che ordina le chiavi. Non ha alcun metodo per determinare se i valori sono uguali. Il valore "A" è un duplicato del valore "a"? Senza un secondo predicato per i valori, non si può dire. Pertanto, non ha nemmeno senso parlare di valori duplicati in una multimappa.

Se desideri un contenitore che memorizzi le coppie e imponga l'unicità di entrambe le parti della coppia, guarda boost::multi_index_container . È molto flessibile, ma di conseguenza richiede un carico di argomenti.


EDIT:questa risposta non risponde più alla domanda attuale. Lo terrò così com'è perché è stato votato molto, quindi deve essere utile per alcuni.

Il multi in multimap sta per il fatto che la stessa chiave possono verificarsi più volte.

Lo standard non pone limiti al tipo utilizzato come valore, quindi non si può presumere che operator==() è definito. Poiché non vogliamo che il risultato del tuo codice dipenda dal fatto che operator==() sia definito o meno, non viene mai utilizzato.

std::multimap non sostituisce std::map . Come hai notato, si comporta diversamente quando la stessa chiave viene inserita più volte. Se vuoi std::map comportamento di , usa std::map .

C'è anche un std::multiset .

Il razionale:a volte si vorrebbe mantenere anche tutte le vecchie voci per la stessa chiave. [TBD:inserisci qui qualche esempio]

Personalmente, non uso quasi mai std::multimap . Se voglio più voci per la stessa chiave, di solito mi affido a std::map<std::vector<T> > .


I valori possono essere duplicati perché non è necessario che siano comparabili tra loro. Il contenitore non può fare nulla con i valori oltre a copiarli. Ciò abilita tipi come multimap< int, my_class > .

Se le coppie chiave-valore duplicate non sono desiderabili, utilizza set< pair< T, U > > e usa lower_bound per trovare la prima corrispondenza con una determinata chiave.