uordnet_kort er en tilknyttet beholder, der gemmer elementer dannet af kombinationen af en nøgleværdi og en tilknyttet værdi. Nøgleværdien bruges til entydigt at identificere elementet, og den tilknyttede værdi er det indhold, der er knyttet til nøglen. Både nøgle og værdi kan være af enhver type foruddefineret eller brugerdefineret. Enkelt sagt, en uordnet_kort er som en datastruktur af ordbogstype, der gemmer elementer i sig selv. Den indeholder på hinanden følgende par (nøgle, værdi), som tillader hurtig hentning af et individuelt element baseret på dets unikke nøgle.
kort i java
Internt er unordered_map implementeret ved hjælp af Hash Table , nøglen til mapning hash ind i indekser af en hash-tabel, hvilket er grunden til, at datastrukturens ydeevne afhænger meget af hashfunktionen, men i gennemsnit er omkostningerne ved søg, indsæt og slet fra hash-tabellen er O(1).
Bemærk: I værste fald kan dens tidskompleksitet gå fra O(1) til O(n), især for store primtal. I denne situation er det meget tilrådeligt at bruge et kort i stedet for at undgå at få en TLE(Time Limit Exceeded) fejl.
Syntaks:

unordered_map syntaks
Nedenfor er C++-programmet til at demonstrere et uordnet kort:
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; // indsættelse af værdier ved at bruge [] operator umap['techcodeview.com'] = 10; umap['Øvelse'] = 20; umap['Bidrag'] = 30; // At krydse et uordnet kort for (auto x : umap) cout<< x.first << ' ' << x.second << endl; }> |
>
>Produktion
Contribute 30 Practice 20 techcodeview.com 10>

unordered_map Output
Forklaring: Den specifikke ting, som dette output retfærdiggør, er, at værdien af resultatet af unordered_map produceres på en tilfældig nøgle-til-værdi måde, mens kortet viser værdi og nøgle på en ordnet måde.
unordered_map vs unordered_set
| Uordnet_kort | Unordered_set |
|---|---|
| Unordered_map indeholder kun elementer i form af (nøgle-værdi) par. | Unordered_set indeholder ikke nødvendigvis elementer i form af nøgle-værdi-par, disse bruges hovedsageligt til at se tilstedeværelsen/fraværet af et sæt. |
| Operatør ' []' at udtrække den tilsvarende værdi af en nøgle, der er til stede i kortet. | Søgningen efter et element udføres ved hjælp af en Find () funktion. Så der er ikke behov for en operatør[]. |
Bemærk: Overvej for eksempel problemet med at tælle frekvenserne af individuelle ord. Vi kan ikke bruge unordered_set (eller set), da vi ikke kan gemme tællinger, mens vi kan bruge unordered_map.
uordnet_kort vs kort
| Uordnet_kort | Kort |
|---|---|
| Nøglen unordered_map kan gemmes i enhver rækkefølge. | Kortet er en ordnet sekvens af unikke nøgler |
| Unordered_Map implementerer en ubalanceret træstruktur, på grund af hvilken det ikke er muligt at opretholde orden mellem elementerne | Kort implementerer en afbalanceret træstruktur, hvorfor det er muligt at opretholde orden mellem elementerne (ved specifik trægennemgang) |
| Tidskompleksiteten af unordered_map-operationer er O(1) i gennemsnit. | Tidskompleksiteten af kortoperationer er O(log n) |
Metoder på uordnet_kort
En masse funktioner er tilgængelige, der virker på unordered_map. De mest nyttige af dem er:
- operator = operator [] tom størrelse for kapacitetens begyndelse og slutning for iteratoren. finde og tælle til opslag. indsæt og slet for ændring.
Nedenstående tabel viser den komplette liste over metoderne til et uordnet_kort:
| Metoder/funktioner | Beskrivelse |
|---|---|
| på() | Denne funktion i C++ unordered_map returnerer referencen til værdien med elementet som nøglen k |
| begynde() | Returnerer en iterator, der peger på det første element i containeren i unordered_map containeren |
| ende() | Returnerer en iterator, der peger på positionen forbi det sidste element i containeren i unordered_map containeren |
| spand() | Returnerer det spandnummer, hvor elementet med nøglen k er placeret på kortet |
| bucket_count | Bucket_count bruges til at tælle det samlede antal. af spande i det uordnede_kort. Der kræves ingen parameter for at gå ind i denne funktion |
| spandstørrelse | Returnerer antallet af elementer i hver bucket af det uordnede_kort |
| tælle() | Tæl antallet af elementer til stede i et uordnet_kort med en given nøgle |
| lige_område | Returner grænserne for et område, der inkluderer alle elementerne i beholderen med en nøgle, der sammenlignes med k |
| Find() | Returnerer iterator til elementet |
| tom() | Kontrollerer om containeren er tom i unordered_map containeren |
| slette() | Slet elementer i containeren i unordered_map containeren |
C++11-biblioteket giver også funktioner til at se internt brugte bucket-antal, bucket-størrelse og også brugte hash-funktioner og forskellige hash-politikker, men de er mindre nyttige i rigtige applikationer. Vi kan iterere over alle elementer af unordered_map ved hjælp af Iterator.
C++
hvad 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 = { //indsætter element direkte i kortet {'One', 1}, {'To', 2}, {'Tre', 3} }; // indsættelse af værdier ved at bruge [] operator umap['PI'] = 3.14; umap['root2'] = 1.414; umap['root3'] = 1.732; umap['log10'] = 2.302; umap['loge'] = 1.0; // indsættelse af værdi ved at indsætte funktion umap.insert(make_pair('e', 2.718)); strengnøgle = 'PI'; // Hvis nøglen ikke findes i map iterator // til ende 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 gemmer nøgledelen og // itr->second gemmer værdidelen cout ' '<< itr->anden<< endl; } }> |
>
>Produktion
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>
Find frekvenser af individuelle ord
Givet en række af ord er opgaven at finde frekvenserne af de enkelte ord:
Input: str = nørder for nørder nørder quiz øv qa for;
Produktion: Frekvenser af individuelle ord er
(øv, 1)
(for, 2)
(qa, 1)
(quiz, 1)
(nørder, 3)
Nedenfor er C++-programmet til at implementere ovenstående tilgang:
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; // bryde input til ord ved hjælp af // string stream // Bruges til at bryde ord stringstream ss(str); // For at gemme individuelle ord strengord; mens (ss>> ord) wordFreq[ord]++; // gentager nu over word, freq-par // og udskriver dem i format unordered_mapint>:: iterator p; for (p = wordFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->anden<< ')
'; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }> |
>
>Produktion
(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>
Seneste artikler om unordered_map