unordered_map ir saistīts konteiners, kurā tiek glabāti elementi, ko veido atslēgas vērtības un kartētas vērtības kombinācija. Atslēgas vērtība tiek izmantota, lai unikāli identificētu elementu, un kartētā vērtība ir ar atslēgu saistītais saturs. Gan atslēga, gan vērtība var būt jebkura veida iepriekš definētas vai lietotāja noteiktas. Vienkārši izsakoties, an unordered_map ir kā vārdnīcas tipa datu struktūra, kas sevī glabā elementus. Tas satur secīgus pārus (atslēga, vērtība), kas ļauj ātri izgūt atsevišķu elementu, pamatojoties uz tā unikālo atslēgu.
kat timpf augums
Iekšēji unordered_map tiek ieviests, izmantojot Hash Table , kartēšanai nodrošinātā atslēga tiek sajaukta jaukšanas tabulas indeksos, tāpēc datu struktūras veiktspēja ir ļoti atkarīga no jaucējfunkcijas, bet vidēji izmaksas meklēt, ievietot un dzēst no hash tabulas ir O(1).
Piezīme: Sliktākajā gadījumā tā laika sarežģītība var mainīties no O(1) līdz O(n), īpaši lieliem pirmskaitļiem. Šādā situācijā ir ļoti ieteicams izmantot karti, lai izvairītos no kļūdas TLE (Time Limit Exceeded) saņemšanas.
Sintakse:

unordered_map sintakse
Zemāk ir C++ programma, lai demonstrētu nesakārtotu karti:
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; // vērtību ievietošana, izmantojot [] operatoru umap['techcodeview.com'] = 10; umap['Prakse'] = 20; umap['Ieguldīt'] = 30; // Traversing an ordered map for (auto x : umap) cout<< x.first << ' ' << x.second << endl; }> |
>
>Izvade
Contribute 30 Practice 20 techcodeview.com 10>

unordered_map Izvade
Paskaidrojums: Konkrētā lieta, ko šī izvade attaisno, ir tāda, ka unordered_map iznākuma vērtība tiek iegūta nejaušā atslēgas-vērtības veidā, turpretim karte parāda vērtību un atslēgu sakārtotā veidā.
unordered_map vs unordered_set
| Unordered_map | Unordered_set |
|---|---|
| Unordered_map satur elementus tikai (atslēgas-vērtības) pāru veidā. | Unordered_set ne vienmēr satur elementus atslēgu un vērtību pāru veidā, tos galvenokārt izmanto, lai redzētu kopas esamību/neesamību. |
| operators ' []' lai iegūtu atbilstošo kartē esošās atslēgas vērtību. | Elementa meklēšana tiek veikta, izmantojot a atrast () funkcija. Tāpēc nav nepieciešams operators[]. |
Piezīme: Piemēram, apsveriet atsevišķu vārdu biežuma skaitīšanas problēmu. Mēs nevaram izmantot unordered_set (vai set), jo mēs nevaram saglabāt skaitu, kamēr mēs varam izmantot unordered_map.
unordered_map vs karte
| Unordered_map | Karte |
|---|---|
| Atslēgu unordered_map var saglabāt jebkurā secībā. | Karte ir sakārtota unikālo atslēgu secība |
| Unordered_Map īsteno nelīdzsvarotu koka struktūru, kuras dēļ nav iespējams uzturēt kārtību starp elementiem | Karte īsteno sabalansētu koka struktūru, tāpēc ir iespējams uzturēt kārtību starp elementiem (ar konkrētu koku šķērsošanu) |
| Unordered_map operāciju laika sarežģītība vidēji ir O(1). | Kartes operāciju laika sarežģītība ir O(log n) |
Metodes uz unordered_map
Ir pieejamas daudzas funkcijas, kas darbojas uz unordered_map. Visnoderīgākie no tiem ir:
- operators = operators [] tukšs izmērs iteratora jaudas sākumam un beigām. atrodiet un saskaitiet meklēšanu. ievietojiet un izdzēsiet modifikācijai.
Tālāk esošajā tabulā ir parādīts pilns unordered_map metožu saraksts:
| Metodes/Funkcijas | Apraksts |
|---|---|
| at () | Šī funkcija programmā C++ unordered_map atgriež atsauci uz vērtību ar elementu kā taustiņu k |
| sākt () | Atgriež iteratoru, kas norāda uz pirmo elementu konteinerā unordered_map konteinerā |
| beigas () | Atgriež iteratoru, kas norāda uz pozīciju aiz pēdējā elementa konteinerā unordered_map konteinerā |
| spainis () | Atgriež segmenta numuru, kurā kartē atrodas elements ar taustiņu k |
| spaiņu_skaits | Segu_skaits tiek izmantots, lai saskaitītu kopējo nr. no spaiņiem unordered_map. Lai pārietu uz šo funkciju, nav nepieciešams parametrs |
| kausa_izmērs | Atgriež elementu skaitu katrā unordered_map segmentā |
| skaitīt () | Saskaitiet elementu skaitu kartē unordered_map ar doto atslēgu |
| vienāds_diapazons | Atgrieziet diapazona robežas, kas ietver visus konteinera elementus, ar atslēgu, kas ir vienāda ar k |
| atrast () | Atgriež iteratoru elementam |
| tukšs () | Pārbauda, vai konteiners unordered_map konteinerā ir tukšs |
| dzēst () | Dzēst elementus konteinerā unordered_map konteinerā |
C++11 bibliotēka nodrošina arī funkcijas, lai redzētu iekšēji izmantoto segmentu skaitu, segmenta lielumu, kā arī izmantoto jaucējfunkciju un dažādas jaukšanas politikas, taču tās ir mazāk noderīgas reālās lietojumprogrammās. Mēs varam atkārtot visus unordered_map elementus, izmantojot Iterator.
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 = { //elementa ievietošana tieši kartē {'One', 1}, {'Two', 2}, {'Trīs', 3} }; // vērtību ievietošana, izmantojot [] operatoru umap['PI'] = 3.14; umap['root2'] = 1,414; umap['root3'] = 1,732; umap['log10'] = 2,302; umap['loge'] = 1,0; // vērtības ievietošana ar ievietošanas funkciju umap.insert(make_pair('e', 2.718)); virknes atslēga = 'PI'; // Ja atslēga nav atrasta kartes iteratorā // to end tiek atgriezta 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>::iterators itr; cout<< '
All Elements :
'; for (itr = umap.begin(); itr != umap.end(); itr++) { // itr works as a pointer to // pair type // itr->vispirms saglabā atslēgas daļu un // itr->otrā saglabā vērtības daļu cout ' '<< itr->otrais<< endl; } }> |
>
>Izvade
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>
Atrodiet atsevišķu vārdu biežumu
Dota vārdu virkne, uzdevums ir atrast atsevišķu vārdu biežumu:
Ievade: str = geeks for geeks geeks viktorīna prakse qa for;
Izvade: Atsevišķu vārdu biežums ir
(prakse, 1)
(par, 2)
(qa, 1)
(viktorīna, 1)
(geeks, 3)
Zemāk ir C++ programma, lai īstenotu iepriekš minēto pieeju:
C++
zemsvītras piezīmes
// 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; // ievades sadalīšana vārdā, izmantojot // virknes straumi // Izmanto vārdu sadalīšanai stringstream ss(str); // Lai saglabātu atsevišķus vārdus virknes vārds; while (ss>> vārds) vārdsFreq[vārds]++; // tagad atkārto vārdu, frekvenču pāri // un drukā tos formātā unordered_mapint>:: iterators p; for (p = vārdsFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->otrais<< ')
'; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }> |
>
>Izvade
(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>
Jaunākie raksti vietnē unordered_map