netvarkingas_žemėlapis yra susietas konteineris, kuriame saugomi elementai, sudaryti iš rakto vertės ir susietos vertės derinio. Rakto reikšmė naudojama unikaliai identifikuoti elementą, o susieta vertė yra su raktu susietas turinys. Ir raktas, ir reikšmė gali būti bet kokio tipo iš anksto arba vartotojo apibrėžti. Paprastai tariant, an netvarkingas_žemėlapis yra tarsi žodyno tipo duomenų struktūra, kuri savyje saugo elementus. Jame yra nuoseklios poros (raktas, reikšmė), kurios leidžia greitai gauti atskirą elementą pagal jo unikalų raktą.
vakarienė prieš vakarienę
Viduje unordered_map yra įdiegtas naudojant maišos lentelę, raktas, pateiktas žemėlapiui, yra sumaišomas į maišos lentelės indeksus, todėl duomenų struktūros našumas labai priklauso nuo maišos funkcijos, tačiau vidutiniškai ieškoti, įterpti ir ištrinti iš maišos lentelės yra O(1).
Pastaba: Blogiausiu atveju jo sudėtingumas gali būti nuo O(1) iki O(n), ypač esant dideliems pirminiams skaičiams. Esant tokiai situacijai, labai patartina naudoti žemėlapį, kad išvengtumėte TLE (viršytas laiko limitas) klaidos.
Sintaksė:

unordered_map sintaksė
Žemiau yra C++ programa, skirta parodyti nesutvarkytą žemėlapį:
C++
// C++ program to demonstrate> // functionality of unordered_map> #include> #include> using> namespace> std;> > // Driver code> int> main()> {> >// Declaring umap to be of> >// type key> >// will be of STRING type> >// and mapped VALUE will> >// be of int type> >unordered_mapint>umap; // reikšmių įterpimas naudojant [] operatorių umap['techcodeview.com'] = 10; umap['Praktika'] = 20; umap['Prisidėti'] = 30; // Traversing an ordered map for (auto x : umap) cout<< x.first << ' ' << x.second << endl; }> |
>
>Išvestis
Contribute 30 Practice 20 techcodeview.com 10>

unordered_map Išvestis
Paaiškinimas: Konkretus dalykas, kurį pateisina ši išvestis, yra tai, kad unordered_map rezultato vertė sukuriama atsitiktiniu rakto į vertę būdu, o žemėlapyje reikšmė ir raktas rodomi tvarkingai.
unordered_map vs unordered_set
| Netvarkingas_žemėlapis | Unordered_set |
|---|---|
| Unordered_map yra elementų tik (rakto ir reikšmės) porų pavidalu. | Unordered_set nebūtinai turi elementų rakto ir reikšmių porų pavidalu, jie daugiausia naudojami norint pamatyti rinkinio buvimą / nebuvimą. |
| Operatorius ' []' norėdami išgauti atitinkamą rakto, esančio žemėlapyje, reikšmę. | Elemento paieška atliekama naudojant a rasti () funkcija. Taigi nereikia operatoriaus[]. |
Pastaba: Pavyzdžiui, apsvarstykite atskirų žodžių dažnių skaičiavimo problemą. Negalime naudoti unordered_set (arba set), nes negalime saugoti skaičių, kol galime naudoti unordered_map.
unordered_map vs žemėlapis
| Netvarkingas_žemėlapis | Žemėlapis |
|---|---|
| Raktas unordered_map gali būti saugomas bet kokia tvarka. | Žemėlapis yra sutvarkyta unikalių raktų seka |
| Unordered_Map įgyvendina nesubalansuotą medžio struktūrą, dėl kurios neįmanoma palaikyti tvarkos tarp elementų | Žemėlapis įgyvendina subalansuotą medžio struktūrą, todėl galima palaikyti tvarką tarp elementų (per tam tikrą medį). |
| Unordered_map operacijų laiko sudėtingumas yra vidutiniškai O(1). | Žemėlapio operacijų laiko sudėtingumas yra O(log n) |
Metodai unordered_map
Yra daug funkcijų, kurios veikia unordered_map. Naudingiausi iš jų yra šie:
- operatorius = operatorius [] tuščias iteratoriaus talpos pradžios ir pabaigos dydis. rasti ir suskaičiuoti paieškas. įdėkite ir ištrinkite modifikavimui.
Žemiau esančioje lentelėje parodytas visas unordered_map metodų sąrašas:
| Metodai/Funkcijos | apibūdinimas |
|---|---|
| adresu () | Ši funkcija C++ unordered_map grąžina nuorodą į reikšmę, kurios elementas yra raktas k |
| pradėti () | Grąžina iteratorių, nukreipiantį į pirmąjį konteinerio elementą unordered_map konteineryje |
| galas() | Grąžina iteratorių, nukreipiantį į vietą, esančią už paskutinio sudėtinio rodinio elemento unordered_map konteineryje |
| kibiras () | Grąžina segmento numerį, kuriame yra elementas su raktu k žemėlapyje |
| kibirų_skaičius | Bucket_count naudojamas skaičiuojant bendrą Nr. kibirų netvarkingame_žemėlapyje. Norint pereiti į šią funkciją, nereikia jokių parametrų |
| kibiro_dydis | Grąžina elementų skaičių kiekviename unordered_map segmente |
| skaiciuoti () | Suskaičiuokite elementų skaičių unordered_map su nurodytu raktu |
| lygus_diapazonas | Grąžinkite diapazono, apimančio visus sudėtinio rodinio elementus, ribas, naudodami raktą, kuris lyginamas su k |
| rasti () | Grąžina iteratorių į elementą |
| tuščia() | Patikrina, ar konteineris tuščias unordered_map konteineryje |
| ištrinti () | Ištrinti sudėtinio rodinio elementus unordered_map konteineryje |
C++11 bibliotekoje taip pat yra funkcijų, leidžiančių matyti viduje naudojamų segmentų skaičių, segmento dydį, taip pat naudojamą maišos funkciją ir įvairias maišos strategijas, tačiau jos yra mažiau naudingos realiose programose. Naudodami Iteratorių galime kartoti visus unordered_map elementus.
C++
// C++ program to demonstrate> // Initialization, indexing,> // and iteration> #include> #include> using> namespace> std;> > // Driver code> int> main()> {> >// Declaring umap to be of> >// type key> >// will be of string type and> >// mapped value will be of double type> >unordered_mapdouble>umap = { //elementas įterpiamas tiesiai į žemėlapį {'Vienas', 1}, {'Du', 2}, {'Trys', 3} }; // reikšmių įterpimas naudojant [] operatorių umap['PI'] = 3.14; umap['root2'] = 1,414; umap['root3'] = 1,732; umap['log10'] = 2,302; umap['loge'] = 1,0; // reikšmės įterpimas naudojant įterpimo funkciją umap.insert(make_pair('e', 2.718)); eilutės raktas = 'PI'; // Jei raktas nerastas žemėlapio iteratoriuje // to end grąžinamas if (umap.find(key) == umap.end()) cout<< key << ' not found
'; // If key found then iterator to that // key is returned else cout << 'Found ' << key << '
'; key = 'lambda'; if (umap.find(key) == umap.end()) cout << key << ' not found
'; else cout << 'Found ' << key << endl; // iterating over all value of umap unordered_mapdouble>::iteratorius itr; cout<< '
All Elements :
'; for (itr = umap.begin(); itr != umap.end(); itr++) { // itr works as a pointer to // pair type // itr->pirma išsaugo pagrindinę dalį ir // itr->antroji išsaugo vertės dalį cout ' '<< itr->antra<< endl; } }> |
>
>Išvestis
Found PI lambda not found All Elements : e 2.718 loge 1 log10 2.302 Two 2 One 1 Three 3 PI 3.14 root2 1.414 root3 1.732>
Raskite atskirų žodžių dažnius
Pateikus žodžių eilutę, užduotis yra rasti atskirų žodžių dažnius:
Įvestis: str = geeks geeks geeks viktorina praktika qa for;
Išvestis: Atskirų žodžių dažniai yra
(praktika, 1)
(už, 2)
(qa, 1)
(viktorina, 1)
(geeks, 3)
Žemiau yra C++ programa, skirta įgyvendinti aukščiau nurodytą metodą:
C++
krūvos rūšiavimas
// C++ program to find freq> // of every word using unordered_map> #include> using> namespace> std;> > // Prints frequencies of> // individual words in str> void> printFrequencies(>const> string &str)> {> >// declaring map of type,> >// each word is mapped to its frequency> >unordered_mapint>wordFreq; // įvesties laužymas į žodį naudojant // string stream // Naudojamas žodžių laužymui stringstream ss(str); // Atskiriems žodžiams saugoti eilutė žodis; while (ss>> žodis) žodisFreq[žodis]++; // dabar kartojamas žodis, dažnių pora // ir spausdinamas formatu unordered_mapint>:: iteratorius p; for (p = wordFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->antra<< ')
'; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }> |
>
>Išvestis
(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>
Naujausi straipsniai unordered_map