map vs unordered_map in C++

Prerequisito: std::mappa , std::unordered_map
Quando si tratta di efficienza, c’è un’enorme differenza tra mappe e mappe non ordinate.
Dobbiamo conoscere il funzionamento interno di entrambi per decidere quale utilizzare.

Differenza:

 | map | unordered_map --------------------------------------------------------- Ordering | increasing order | no ordering | of keys(by default) | Implementation | Self balancing BST | Hash Table | like Red-Black Tree | search time | log(n) | O(1) ->Nella media | | O(n) -> Tempo di inserimento nel caso peggiore | log(n) + Ribilancia | Uguale alla ricerca Ora di eliminazione | log(n) + Ribilancia | Uguale alla ricerca 

Usa std::map quando

  • Hai bisogno di dati ordinati.
  • Dovresti stampare/accedere ai dati (in ordine ordinato).
  • Hai bisogno del predecessore/successore degli elementi.
  • Scopri i vantaggi di BST rispetto a Hash Table per ulteriori casi.

CPP




// CPP program to demonstrate use of std::map> #include> int> main()> {> > // Ordered map> > std::map <> int> ,> int> >ordine;> > // Mapping values to keys> > order[5] = 10;> > order[3] = 500;> > order[20] = 100;> > order[1] = 1;> > // Iterating the map and> > // printing ordered values> > for> (> auto> i = order.begin(); i> > != order.end(); i++) {> > std::cout < < ' : ' ' '; } }>

Produzione

1 : 1 3 : 500 5 : 10 20 : 100 

Usa std::unordered_map quando

  • È necessario tenere il conto di alcuni dati (esempio: stringhe) e non è richiesto alcun ordinamento.
  • È necessario l'accesso a un singolo elemento, ovvero senza attraversamento.

CPP




// CPP program to demonstrate use of> // std::unordered_map> #include> int> main()> {> > // Unordered map> > std::unordered_map <> int> ,> int> >ordine;> > // Mapping values to keys> > order[5] = 10;> > order[3] = 500;> > order[20] = 100;> > order[1] = 1;> > // Iterating the map and> > // printing unordered values> > for> (> auto> i = order.begin();> > i != order.end(); i++)> > {> > std::cout < < ' : ' ' '; } }>

Produzione

1 : 1 20 : 100 3 : 500 5 : 10 

Vediamo le differenze in forma tabellare:

carta geografica mappa_non ordinata
1. la mappa è definita nel file di intestazione #include unordered_map è definito nel file di intestazione #include
2. È implementato da albero rosso-nero . È implementato utilizzando la tabella hash.
3. È lento. È veloce.
4. Complessità temporale per le operazioni è O(log N) La complessità temporale delle operazioni è O(1)
5. map viene utilizzata per memorizzare elementi come coppie chiave-valore in ordine ordinato per chiave. unordered_map viene utilizzato per memorizzare elementi come coppie chiave-valore in ordine non ordinato.