logo

unordered_map i C++ STL

uordnet_kart er en tilknyttet beholder som lagrer elementer dannet av kombinasjonen av en nøkkelverdi og en tilordnet verdi. Nøkkelverdien brukes til å identifisere elementet unikt, og den tilordnede verdien er innholdet knyttet til nøkkelen. Både nøkkel og verdi kan være av hvilken som helst type forhåndsdefinert eller brukerdefinert. Enkelt sagt, en uordnet_kart er som en datastruktur av ordboktype som lagrer elementer i seg selv. Den inneholder påfølgende par (nøkkel, verdi), som tillater rask gjenfinning av et individuelt element basert på dens unike nøkkel.

kart i java

Internt unordered_map er implementert ved hjelp av Hash Table , nøkkelen som gis for å kartlegge hashes inn i indekser av en hash-tabell som er grunnen til at ytelsen til datastrukturen avhenger mye av hash-funksjonen, men i gjennomsnitt er kostnaden for søke, sette inn og slette fra hash-tabellen er O(1).



Merk: I verste fall kan tidskompleksiteten gå fra O(1) til O(n), spesielt for store primtall. I denne situasjonen er det sterkt tilrådelig å bruke et kart i stedet for å unngå å få en TLE(Time Limit Exceeded) feil.

Syntaks:

unordered_map syntaks med eksempel

unordered_map syntaks



Nedenfor er C++-programmet for å demonstrere et uordnet kart:

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; // sette inn verdier ved å bruke [] operator umap['techcodeview.com'] = 10; umap['Øvelse'] = 20; umap['Bidra'] = 30; // Å krysse et uordnet kart for (auto x : umap) cout<< x.first << ' ' << x.second << endl; }>

>

>

Produksjon

Contribute 30 Practice 20 techcodeview.com 10>
unordered_map Utdata med eksempel

unordered_map Utdata

Forklaring: Det spesifikke som denne utgangen rettferdiggjør er at verdien av resultatet av unordered_map produseres på en tilfeldig nøkkel-til-verdi måte, mens kartet viser verdi og nøkkel på en ordnet måte.

unordered_map vs unordered_set

Uordnet_kart

Unordered_set

Unordered_map inneholder bare elementer i form av (nøkkel-verdi)-par. Unordered_set inneholder ikke nødvendigvis elementer i form av nøkkel-verdi-par, disse brukes hovedsakelig for å se tilstedeværelse/fravær av et sett.
Operatør ' []' for å trekke ut den tilsvarende verdien av en nøkkel som finnes i kartet. Søket etter et element gjøres ved å bruke en finne () funksjon. Så ingen behov for en operatør[].

Merk: Tenk for eksempel på problemet med å telle frekvensene til individuelle ord. Vi kan ikke bruke unordered_set (eller set) siden vi ikke kan lagre tellinger mens vi kan bruke unordered_map.

uordnet_kart vs kart

Uordnet_kart

Kart

Nøkkelen unordered_map kan lagres i hvilken som helst rekkefølge. Kartet er en ordnet sekvens av unike nøkler
Unordered_Map implementerer en ubalansert trestruktur som gjør at det ikke er mulig å opprettholde orden mellom elementene Kart implementerer en balansert trestruktur som er grunnen til at det er mulig å opprettholde orden mellom elementene (ved spesifikk tregjennomgang)
Tidskompleksiteten til unordered_map-operasjoner er O(1) i gjennomsnitt. Tidskompleksiteten til kartoperasjoner er O(log n)

Metoder på uordnet_kart

Mange funksjoner er tilgjengelige som fungerer på unordered_map. De mest nyttige av dem er:

    operator = operator [] tom størrelse for kapasitetens begynnelse og slutt for iteratoren. finne og telle for oppslag. sett inn og slett for endring.

Tabellen nedenfor viser den fullstendige listen over metodene for et uordnet_kart:

Metoder/funksjoner

Beskrivelse

på() Denne funksjonen i C++ unordered_map returnerer referansen til verdien med elementet som nøkkel k
begynne() Returnerer en iterator som peker til det første elementet i beholderen i unordered_map-beholderen
slutt() Returnerer en iterator som peker til posisjonen forbi det siste elementet i beholderen i unordered_map-beholderen
bøtte() Returnerer bøttenummeret der elementet med nøkkelen k er plassert i kartet
bucket_count Bucket_count brukes til å telle totalt antall. av bøtter i uordnet_kartet. Ingen parameter er nødvendig for å gå inn i denne funksjonen
bøttestørrelse Returnerer antall elementer i hver bøtte av uordnet_kartet
telle() Tell antall elementer som finnes i et uordnet_kart med en gitt nøkkel
like_område Returner grensene til et område som inkluderer alle elementene i beholderen med en nøkkel som sammenlignes med k
finne() Returnerer iterator til elementet
tømme() Sjekker om beholderen er tom i unordered_map-beholderen
viske ut() Slett elementer i beholderen i unordered_map-beholderen

C++11-biblioteket tilbyr også funksjoner for å se internt brukt bøtteantall, bøttestørrelse, og også brukt hashfunksjon og ulike hashpolicyer, men de er mindre nyttige i virkelige applikasjoner. Vi kan iterere over alle elementene i unordered_map ved å bruke Iterator.

C++




hva er desktop.ini

// 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 = { //setter inn element direkte i kartet {'One', 1}, {'To', 2}, {'Tre', 3} }; // sette inn verdier ved å bruke [] operator umap['PI'] = 3.14; umap['root2'] = 1.414; umap['root3'] = 1.732; umap['log10'] = 2.302; umap['loge'] = 1.0; // setter inn verdi ved å sette inn funksjon umap.insert(make_pair('e', 2.718)); strengnøkkel = 'PI'; // Hvis nøkkelen ikke finnes i kartiteratoren // to end returneres hvis (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->først lagrer nøkkeldelen og // itr->second lagrer verdidelen cout ' '<< itr->sekund<< endl; } }>

>

>

Produksjon

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>

Finn frekvenser for individuelle ord

Gitt en rekke ord, er oppgaven å finne frekvensene til de enkelte ordene:

Inndata: str = geeks for nerder nerder quiz øv qa for;
Produksjon: Frekvenser av individuelle ord er
(øve, 1)
(for, 2)
(qa, 1)
(quiz, 1)
(nerder, 3)

Nedenfor er C++-programmet for å implementere tilnærmingen ovenfor:

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; // bryte input til ord ved hjelp av // string stream // Brukes for å bryte ord stringstream ss(str); // For å lagre individuelle ord strengord; while (ss>> ord) wordFreq[ord]++; // itererer nå over word, freq-par // og skriver dem ut i formatet unordered_mapint>:: iterator p; for (p = wordFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->sekund<< ') '; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }>

>

>

Produksjon

(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>

Nylige artikler om unordered_map