map vs unordered_map programoje C++
Būtina sąlyga: std::žemėlapis , std::netvarkomas_žemėlapis
Kalbant apie efektyvumą, yra didžiulis skirtumas tarp žemėlapių ir netvarkingų žemėlapių.
Turime žinoti abiejų vidinį veikimą, kad nuspręstume, kurį iš jų naudoti.
Skirtumas:
| 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) ->Vidutinis | | O(n) -> Blogiausias atvejis Įterpimo laikas | log(n) + Perbalansuoti | Tas pats kaip ir paieška Ištrynimo laikas | log(n) + Perbalansuoti | Tas pats kaip paieška
Naudokite std::map kada
- Jums reikia užsakytų duomenų.
- Turėtumėte atsispausdinti / pasiekti duomenis (rūšiuota tvarka).
- Jums reikia elementų pirmtako / įpėdinio.
- Daugiau atvejų žr. BST pranašumus, palyginti su Hash Tabl e.
CPP
// CPP program to demonstrate use of std::map> #include> int> main()> {> > // Ordered map> > std::map <> int> ,> int> >užsakymas;> > // 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 < < ' : ' '
'; } }> |
Išvestis
1 : 1 3 : 500 5 : 10 20 : 100
Kai naudokite std::unordered_map
- Turite nuolat skaičiuoti kai kuriuos duomenis (pavyzdys – eilutes) ir užsakyti nereikia.
- Jums reikia vieno elemento prieigos, t. y. jokio perėjimo.
CPP
// CPP program to demonstrate use of> // std::unordered_map> #include> int> main()> {> > // Unordered map> > std::unordered_map <> int> ,> int> >užsakymas;> > // 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 < < ' : ' '
'; } }> |
Išvestis
1 : 1 20 : 100 3 : 500 5 : 10
Pažiūrėkime skirtumus lentelės pavidalu -:
| žemėlapis | netvarkingas_žemėlapis | |
| 1. | žemėlapis yra apibrėžtas #include antraštės faile | unordered_map yra apibrėžtas #include antraštės faile |
| 2. | Jį įgyvendina raudonai juodas medis . | Jis įgyvendinamas naudojant maišos lentelę. |
| 3. | Tai lėta. | Tai greita. |
| 4. | Laiko sudėtingumas operacijoms yra O(log N) | Operacijų laiko sudėtingumas yra O(1) |
| 5. | žemėlapis naudojamas elementams saugoti kaip raktų, reikšmių poras, surūšiuotas pagal raktą. | unordered_map naudojamas elementams saugoti kaip raktų, reikšmių poras nerūšiuota tvarka. |