map vs unordered_map i C++
Forutsetning: std::kart , std::uordnet_kart
Når det kommer til effektivitet er det stor forskjell på kart og uordnede kart.
Vi må kjenne til det interne arbeidet til begge for å bestemme hvilken som skal brukes.
Forskjellen:
| 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) ->Gjennomsnittlig | | O(n) -> Worst Case Innsettingstid | log(n) + Rebalanse | Samme som søk Slettingstid | log(n) + Rebalanse | Samme som søk
Bruk std::map when
- Du trenger bestilte data.
- Du må skrive ut/få tilgang til dataene (i sortert rekkefølge).
- Du trenger forgjenger/etterfølger av elementer.
- Se fordelene med BST fremfor Hash Tabell e for flere tilfeller.
CPP
// CPP program to demonstrate use of std::map> #include> int> main()> {> > // Ordered map> > std::map <> int> ,> int> >bestille;> > // 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 < < ' : ' '
'; } }> |
Produksjon
1 : 1 3 : 500 5 : 10 20 : 100
Bruk std::unordered_map når
- Du må holde telling av noen data (eksempel – strenger) og ingen bestilling er nødvendig.
- Du trenger tilgang til enkeltelementer, dvs. ingen kryssing.
CPP
// CPP program to demonstrate use of> // std::unordered_map> #include> int> main()> {> > // Unordered map> > std::unordered_map <> int> ,> int> >bestille;> > // 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 < < ' : ' '
'; } }> |
Produksjon
1 : 1 20 : 100 3 : 500 5 : 10
La oss se forskjellene i en tabellform -:
| kart | uordnet_kart | |
| 1. | kartet er definert i #include header-fil | unordered_map er definert i #include header-fil |
| 2. | Den er implementert av rød-svart tre . | Det er implementert ved hjelp av hash-tabell. |
| 3. | Det er tregt. | Det er raskt. |
| 4. | Tidskompleksitet for operasjoner er O(log N) | Tidskompleksitet for operasjoner er O(1) |
| 5. | kart brukes til å lagre elementer som nøkkel, verdipar i rekkefølge sortert etter nøkkel. | unordered_map brukes til å lagre elementer som nøkkel-verdipar i ikke-sortert rekkefølge. |