logo

unordered_map v C++ STL

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 s primerom

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 s primerom

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