Differenza tra hash_map e unordered_map?
-
22-07-2019 - |
Domanda
Di recente ho scoperto che l'implementazione della mappa hash in C ++ si chiamerà unordered_map
.
Quando ho cercato perché non stessero semplicemente usando hash_map
, ho scoperto che apparentemente ci sono problemi di compatibilità con l'implementazione di hash_map
che unordered_map si risolve (ulteriori informazioni qui ).
Quella pagina wiki non fornisce molte più informazioni, quindi mi chiedo se qualcuno conoscesse alcuni dei problemi con hash_map
che unordered_map
risolve.
Soluzione
Poiché nella libreria standard C ++ non è stata definita una tabella hash, diversi implementatori delle librerie standard fornirebbero una tabella hash non standard spesso denominata hash_map
. Poiché queste implementazioni non sono state scritte seguendo uno standard, presentavano tutte sottili differenze di funzionalità e garanzie di prestazione.
A partire da C ++ 11 è stata aggiunta un'implementazione della tabella hash lo standard di libreria standard C ++. È stato deciso di utilizzare un nome alternativo per la classe per prevenire collisioni con queste implementazioni non standard e per impedire l'uso involontario della nuova classe da parte degli sviluppatori che avevano hash_table
nel loro codice.
Il nome alternativo scelto è unordered_map
che in realtà è più descrittivo in quanto suggerisce l'interfaccia della mappa della classe e la natura non ordinata dei suoi elementi.