STL karte, hash_map, unordered_map atšķirība Salīdzinošais

Stl Map Hash_map Unordered_map Distinction Comparative



Pirmkārt:

hash_mapunordered_map Salīdzināt

Konkrēts redzams kaudzes pārpilde : Atšķirība starp hash_map un unordered_map?



Tā kā hash tabula nav definēta C ++ standarta bibliotēkā hash_map, dažādi standarta bibliotēkas ieviesēji nodrošinās hash tabulu, ko parasti sauc par hash_map nestandarta. Tā kā šie ieviešanas veidi neatbilst rakstītajam standartam, tātad tie darbojas un veiktspējas garantijām ir smalkas atšķirības.



Sākot ar C ++ 11, hash tabulas ieviešana ir pievienota C ++ standarta bibliotēkas standartam. Mēs nolēmām izmantot klases alternatīvo nosaukumu, lai novērstu konfliktus ar nestandarta ieviešanu un novērstu nejaušu hash_table izstrādātāju kodā jauno klasi.



Atlasītais alternatīvais nosaukums unordered_map ir aprakstošāks, jo tas norāda uz traucējuma būtību un tā elementu kartēšanas saskarnes klasēm.

redzams hash_mapunordered_map Būtībā tas pats, bet unordered_map Tas tika iekļauts C ++ standarta bibliotēkas standartā.

karte vs nesakārtota karte

Labāks kontrasts, sk .: stackoverflow : Kā izvēlēties starp karti un unordered_map?

Galvenokārt vaicājiet, ievietojiet, izdzēsiet trīs aspektu laika sarežģītību:



attēls

unordered_map (Ekvivalents hash_map) ar map Līdzīgi tiek saglabāti key-value Vērtība, ierakstot key Ātrā atsauce uz value. atšķirība ir unordered_map Nav saskaņā ar key Šķirošanas lielumu,

  1. map
    dati organizācijā, pamatojoties uz sarkanmelna koka ieviešanu, tiek pasūtīts sarkanmelns koks, kuram ir automātiskas šķirošanas funkcija, visu datu iekšējā karte jebkurā laikā.

  2. unordered_map (hash_map)
    pamatojoties uz jaukšanas tabulu, un datu ievietošanas uzmeklēšanas laika sarežģītība ir zema, laiks ir gandrīz nemainīgs, uz vairāk atmiņas patēriņa rēķina. Pamata realizācija, izmantojot relatīvi lielu diapazona indeksu masīvu elementu glabāšanai, daudzu vannu veidošanās, ja taustiņam tiek izmantota hash funkcija, tiek kartēta uz citu uzglabāšanas zonu.

Jūs varat redzēt STL pirmkodu analīzi:

STL pirmkodu analīze -hash_set / hash_multiset
STL pirmkodu analīze -hash_map / hash_multimap
STL pirmkodu analīze - viegli