unordered_map on yhdistetty säilö, joka tallentaa avainarvon ja kartoitetun arvon yhdistelmällä muodostetut elementit. Avainarvoa käytetään elementin yksilöimiseen, ja yhdistetty arvo on avaimeen liittyvä sisältö. Sekä avain että arvo voivat olla mitä tahansa ennalta määritettyjä tai käyttäjän määrittämiä. Yksinkertaisesti sanottuna an unordered_map on kuin sanakirjatyyppinen tietorakenne, joka tallentaa elementtejä itsessään. Se sisältää peräkkäisiä pareja (avain, arvo), mikä mahdollistaa yksittäisen elementin nopean haun sen ainutlaatuisen avaimen perusteella.
kirjoita json tiedostoon python
Sisäisesti unordered_map on toteutettu Hash Table -sovelluksella, kartoitukseen annettu avain tiivistetään hash-taulukon indekseiksi, minkä vuoksi tietorakenteen suorituskyky riippuu paljon hash-funktiosta, mutta keskimäärin hinta etsi, lisää ja poista hash-taulukosta on O(1).
Huomautus: Pahimmassa tapauksessa sen aikamonimutkaisuus voi vaihdella O(1):stä O(n), varsinkin suurille alkuluvuille. Tässä tilanteessa on erittäin suositeltavaa käyttää karttaa, jotta vältytään TLE (Time Limit Exceeded) -virheeltä.
Syntaksi:

unordered_map syntaksi
Alla on C++-ohjelma järjestämättömän kartan esittelyyn:
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; // arvojen lisääminen käyttämällä []-operaattoria umap['techcodeview.com'] = 10; umap['Harjoittelu'] = 20; umap['Avusta'] = 30; // Järjestämättömän kartan kulkeminen kohteelle (auto x : umap) cout<< x.first << ' ' << x.second << endl; }> |
>
>Lähtö
Contribute 30 Practice 20 techcodeview.com 10>

unordered_map Tulostus
Selitys: Erityinen asia, jonka tämä tulos oikeuttaa, on se, että unordered_map-tuloksen arvo tuotetaan satunnaisella avainarvoon -tavalla, kun taas kartta näyttää arvon ja avaimen järjestetyllä tavalla.
unordered_map vs unordered_set
| Järjestämätön_kartta | Järjestämätön_joukko |
|---|---|
| Unordered_map sisältää elementtejä vain (avain-arvo) -parien muodossa. | Järjestämätön_joukko ei välttämättä sisällä elementtejä avain-arvo-parien muodossa, vaan niitä käytetään pääasiassa joukon olemassaolon/puuttumisen näkemiseen. |
| operaattori []' poimimaan kartassa olevan avaimen vastaavan arvon. | Elementin haku tehdään käyttämällä a löytö ()-toiminto. Ei siis tarvita operaattoria[]. |
Huomautus: Harkitse esimerkiksi yksittäisten sanojen taajuuksien laskemisen ongelmaa. Emme voi käyttää unordered_set -asetusta (tai settiä), koska emme voi tallentaa määriä samalla, kun voimme käyttää unordered_map-tilaa.
unordered_map vs kartta
| Järjestämätön_kartta | Kartta |
|---|---|
| Unordered_map-avain voidaan tallentaa missä tahansa järjestyksessä. | Kartta on järjestetty sarja ainutlaatuisia avaimia |
| Unordered_Map toteuttaa epätasapainoisen puurakenteen, jonka vuoksi elementtien välillä ei ole mahdollista ylläpitää järjestystä | Map toteuttaa tasapainoisen puurakenteen, minkä vuoksi elementtien välillä on mahdollista ylläpitää järjestystä (tietyllä puun läpikulkulla) |
| Unordered_map-operaatioiden aikamonimutkaisuus on keskimäärin O(1). | Karttatoimintojen aikamonimutkaisuus on O(log n) |
Menetelmät unordered_mapissa
Saatavilla on paljon toimintoja, jotka toimivat unordered_mapissa. Hyödyllisimmät niistä ovat:
- operaattori = operaattori [] tyhjä koko iteraattorin kapasiteetin alussa ja lopussa. etsi ja laske hakua varten. lisää ja poista muutosta varten.
Alla olevassa taulukossa on täydellinen luettelo unordered_map-kartan menetelmistä:
| Menetelmät/toiminnot | Kuvaus lajittele jonoluettelo java |
|---|---|
| at() | Tämä funktio C++:ssa unordered_map palauttaa viittauksen arvoon, jonka elementti on avaimena k |
| alkaa() | Palauttaa iteraattorin, joka osoittaa ensimmäiseen elementtiin unordered_map-säilön säilön sisällä |
| loppu () | Palauttaa iteraattorin, joka osoittaa sijaintiin viimeisen elementin jälkeen unordered_map-säilön säilössä |
| ämpäri() | Palauttaa kauhan numeron, jossa elementti avaimella k sijaitsee kartalla |
| bucket_count | Bucket_count käytetään laskemaan kokonaismäärä. ämpäristä unordered_mapissa. Tähän toimintoon ei vaadita parametreja |
| bucket_size | Palauttaa elementtien määrän jokaisessa unordered_map-säilössä |
| Kreivi() | Laske järjestämättömässä_kartassa olevien elementtien määrä annetulla avaimella |
| yhtä suuri_alue | Palauta alueen, joka sisältää kaikki säilön elementit, rajat avaimella, joka on yhtä suuri kuin k |
| löytö() | Palauttaa iteraattorin elementtiin |
| tyhjä() | Tarkistaa, onko säilö tyhjä unordered_map-säilössä |
| Erase() | Tyhjennä elementit unordered_map-säilön säilöstä |
C++11-kirjastossa on myös toimintoja, jotka voivat nähdä sisäisesti käytettyjen kauhojen lukumäärän, kauhan koon sekä käytetyn hash-funktion ja erilaiset hash-käytännöt, mutta ne ovat vähemmän hyödyllisiä todellisissa sovelluksissa. Voimme iteroida kaikkia unordered_map-elementtejä Iteratorin avulla.
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 = { //elementin lisääminen suoraan karttaan {'Yksi', 1}, {'Kaksi', 2}, {'Kolme', 3} }; // arvojen lisääminen käyttämällä []-operaattoria umap['PI'] = 3.14; umap['root2'] = 1,414; umap['root3'] = 1,732; umap['log10'] = 2,302; umap['loge'] = 1,0; // arvon lisääminen insert-funktiolla umap.insert(make_pair('e', 2.718)); merkkijonoavain = 'PI'; // Jos avainta ei löydy karttaiteraattorista // to end palautetaan 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>::iteraattori itr; cout<< '
All Elements :
'; for (itr = umap.begin(); itr != umap.end(); itr++) { // itr works as a pointer to // pair type // itr->ensin tallentaa avainosan ja // itr->toiseksi arvon osan cout ' '<< itr->toinen<< endl; } }> |
>
>Lähtö
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>
Etsi yksittäisten sanojen taajuudet
Kun on annettu sanajono, tehtävänä on löytää yksittäisten sanojen taajuudet:
Syöte: str = geeks for geeks geeks quiz harjoitus qa varten;
Lähtö: Yksittäisten sanojen taajuudet ovat
(harjoittelu, 1)
(for, 2)
(qa, 1)
(tietokilpailu, 1)
(nörtti, 3)
Alla on C++-ohjelma yllä olevan lähestymistavan toteuttamiseksi:
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; // syötteen katkaiseminen sanaksi käyttämällä // merkkijonovirtaa // Käytetään sanojen rikkomiseen stringstream ss(str); // Tallentaa yksittäisiä sanoja merkkijono sana; while (ss>> sana) sanaFreq[sana]++; // nyt iteroidaan sanan, taajuuden yli // ja tulostetaan ne muodossa unordered_mapint>:: iterator p; for (p = sanaFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->toinen<< ')
'; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }> |
>
>Lähtö
(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>
Viimeisimmät artikkelit unordered_mapissa