map vs unordered_map i C++

Forudsætning: std::kort , std::uordnet_kort
Når det kommer til effektivitet, er der stor forskel på kort og uordnede kort.
Vi skal kende begges interne arbejde for at beslutte, hvilken der skal bruges.

Forskel:

 | 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) ->Gennemsnit | | O(n) -> Worst Case Indsættelsestid | log(n) + Rebalance | Samme som søgning Sletningstid | log(n) + Rebalance | Samme som søgning 

Brug std::map when

  • Du skal bruge bestilte data.
  • Du skal udskrive/ få adgang til dataene (i sorteret rækkefølge).
  • Du har brug for forgænger/efterfølger af elementer.
  • Se fordelene ved BST frem for Hash Tabel for flere sager.

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 < < ' : ' ' '; } }>

Produktion

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

Brug std::unordered_map når

  • Du skal holde optælling af nogle data (Eksempel – strenge), og ingen bestilling er påkrævet.
  • Du skal have adgang til et enkelt element, dvs. ingen gennemgang.

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 < < ' : ' ' '; } }>

Produktion

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

Lad os se forskellene i en tabelform -:

kort uordnet_kort
1. kort er defineret i #include header-fil unordered_map er defineret i #include header-fil
2. Det er implementeret af rød-sort træ . Det implementeres ved hjælp af hash-tabel.
3. Det er langsomt. Det er hurtigt.
4. Tidskompleksitet for operationer er O(log N) Tidskompleksitet for operationer er O(1)
5. map bruges til at gemme elementer som nøgle-værdipar i rækkefølge sorteret efter nøgle. unordered_map bruges til at gemme elementer som nøgle-værdipar i ikke-sorteret rækkefølge.