neurejen_zemljevid je povezan vsebnik, ki shranjuje elemente, oblikovane s kombinacijo vrednosti ključa in preslikane vrednosti. Vrednost ključa se uporablja za enolično identifikacijo elementa, preslikana vrednost pa je vsebina, povezana s ključem. Tako ključ kot vrednost sta lahko katere koli vrste, vnaprej določena ali uporabniško definirana. Preprosto povedano, an neurejen_zemljevid je kot podatkovna struktura slovarskega tipa, ki hrani elemente v sebi. Vsebuje zaporedne pare (ključ, vrednost), kar omogoča hitro iskanje posameznega elementa na podlagi njegovega unikatnega ključa.
1 od 1000
Interno unordered_map je implementiran z uporabo zgoščevalne tabele, ključ, ki je na voljo za preslikavo, je zgoščen v indekse zgoščevalne tabele, zato je delovanje strukture podatkov zelo odvisno od zgoščevalne funkcije, v povprečju pa so stroški iskanje, vstavljanje in brisanje iz zgoščene tabele je O(1).
Opomba: V najslabšem primeru lahko njegova časovna zapletenost sega od O(1) do O(n), zlasti za velika praštevila. V tem primeru je zelo priporočljivo, da namesto tega uporabite zemljevid, da se izognete prikazu napake TLE (Time Limit Exceeded).
Sintaksa:

sintaksa unordered_map
Spodaj je program C++ za predstavitev neurejenega zemljevida:
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; // vstavljanje vrednosti z uporabo [] operatorja umap['techcodeview.com'] = 10; umap['Vaja'] = 20; umap['Prispevaj'] = 30; // Prečkanje neurejenega zemljevida za (auto x : umap) cout<< x.first << ' ' << x.second << endl; }> |
>
>Izhod
Contribute 30 Practice 20 techcodeview.com 10>

unordered_map Izhod
Pojasnilo: Posebna stvar, ki jo utemeljuje ta izhod, je, da je vrednost izida unordered_map proizvedena na naključni način med ključi in vrednostmi, medtem ko zemljevid prikazuje vrednost in ključ na urejen način.
unordered_map proti unordered_set
| Neurejen_zemljevid | Neurejen_niz |
|---|---|
| Unordered_map vsebuje elemente samo v obliki parov (ključ-vrednost). | Unordered_set ne vsebuje nujno elementov v obliki parov ključ-vrednost, ti se večinoma uporabljajo za prikaz prisotnosti/odsotnosti niza. |
| Operater ' []' za ekstrahiranje ustrezne vrednosti ključa, ki je prisoten v preslikavi. | Iskanje elementa poteka z uporabo a najti () funkcijo. Torej ni potrebe po operaterju []. |
Opomba: Na primer, razmislite o problemu štetja frekvenc posameznih besed. Ne moremo uporabiti unordered_set (ali set), ker ne moremo shraniti števcev, medtem ko lahko uporabimo unordered_map.
unordered_map proti zemljevidu
| Neurejen_zemljevid | Zemljevid |
|---|---|
| Ključ unordered_map je mogoče shraniti v poljubnem vrstnem redu. | Zemljevid je urejeno zaporedje edinstvenih ključev |
| Unordered_Map implementira neuravnoteženo drevesno strukturo, zaradi katere ni mogoče vzdrževati reda med elementi | Map implementira uravnoteženo drevesno strukturo, zato je mogoče vzdrževati red med elementi (z določenim prečkanjem drevesa) |
| Časovna zahtevnost operacij unordered_map je v povprečju O(1). | Časovna kompleksnost operacij zemljevida je O(log n) |
Metode na unordered_map
Na voljo je veliko funkcij, ki delujejo na unordered_map. Najbolj uporabni med njimi so:
- operator = operator [] prazna velikost za začetek in konec kapacitete za iterator. poiščite in preštejte za iskanje. vstavite in izbrišite za spreminjanje.
Spodnja tabela prikazuje celoten seznam metod unordered_map:
| Metode/funkcije | Opis |
|---|---|
| pri() | Ta funkcija v C++ unordered_map vrne sklic na vrednost z elementom kot ključem k |
| začeti() | Vrne iterator, ki kaže na prvi element v vsebniku v vsebniku unordered_map |
| konec () | Vrne iterator, ki kaže na položaj za zadnjim elementom v vsebniku v vsebniku unordered_map |
| vedro() | Vrne številko vedra, kjer se na zemljevidu nahaja element s ključem k |
| bucket_count | Bucket_count se uporablja za štetje skupne št. veder v neurejenem_zemljevidu. Za prehod v to funkcijo ni potreben noben parameter |
| velikost_vedra | Vrne število elementov v vsakem vedru unordered_map |
| štetje () | Preštejte število elementov, prisotnih v unordered_map z danim ključem |
| enak_razpon | Vrni meje obsega, ki vključuje vse elemente v vsebniku s ključem, ki je v primerjavi enak k |
| najti() | Vrne iterator elementu |
| prazno() | Preveri, ali je vsebnik prazen v vsebniku unordered_map |
| izbrisati() | Izbrišite elemente v vsebniku v vsebniku unordered_map |
Knjižnica C++11 ponuja tudi funkcije za ogled interno uporabljenega števila veder, velikosti vedra ter tudi uporabljene zgoščevalne funkcije in različnih pravilnikov o zgoščevanju, vendar so v resničnih aplikacijah manj uporabne. Z Iteratorjem lahko ponovimo vse elemente unordered_map.
C++
objektni razred v Javi
// 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 = { //vstavljanje elementa neposredno v zemljevid {'Ena', 1}, {'Dva', 2}, {'Tri', 3} }; // vstavljanje vrednosti z uporabo [] operatorja umap['PI'] = 3.14; umap['root2'] = 1,414; umap['root3'] = 1,732; umap['log10'] = 2,302; umap['loge'] = 1,0; // vstavljanje vrednosti s funkcijo vstavljanja umap.insert(make_pair('e', 2.718)); ključ niza = 'PI'; // Če ključa ni mogoče najti v iteratorju zemljevida // do konca se vrne 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>::iterator itr; cout<< '
All Elements :
'; for (itr = umap.begin(); itr != umap.end(); itr++) { // itr works as a pointer to // pair type // itr->prvi shrani del ključa in // itr->drugi shrani del vrednosti cout ' '<< itr->drugo<< endl; } }> |
>
>Izhod
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>
Poišči pogostost posameznih besed
Glede na niz besed je naloga najti frekvence posameznih besed:
Vnos: str = geeks za geeks geeks kviz vadba qa za;
Izhod: Pogostosti posameznih besed so
(vaja, 1)
(za, 2)
(qa, 1)
(kviz, 1)
(geeki, 3)
Spodaj je program C++ za implementacijo zgornjega pristopa:
C++
// 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; // razbijanje vnosa v besedo z uporabo // toka nizov // Uporablja se za razbijanje besed stringstream ss(str); // Za shranjevanje posameznih besed string word; medtem ko (ss>> beseda) wordFreq[beseda]++; // zdaj ponavlja besedo, freq par // in jih izpisuje v formatu unordered_mapint>:: iterator p; for (p = wordFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->drugo<< ')
'; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }> |
>
>Izhod
(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>
Nedavni članki na unordered_map