Kaip naudotis „C ++ Unordered Map“

How Use C Unordered Map



Žemėlapis, taip pat žinomas kaip asociatyvus masyvas, yra elementų sąrašas, kuriame kiekvienas elementas yra raktų/verčių pora. Taigi kiekvienas raktas atitinka tam tikrą vertę. Įvairūs raktai gali turėti tą pačią vertę įprastam darbui. Pavyzdžiui, raktai gali būti vaisių sąrašas ir atitinkamos vertės, vaisių spalvos. „C ++“ žemėlapis įgyvendinamas kaip duomenų struktūra su narių funkcijomis ir operatoriais. Užsakytas žemėlapis yra tas, kuriame elementų poros buvo užsakytos raktais. Netvarkingas žemėlapis yra tas, kuriame nėra tvarkos. Šiame straipsnyje paaiškinta, kaip naudoti C ++ nesutvarkytą žemėlapį, parašytą kaip unordered_map. Norint suprasti šį straipsnį, jums reikia žinių apie C ++ rodykles. unordered_map yra standartinės C ++ bibliotekos dalis.

Klasė ir objektai

Klasė yra kintamųjų ir funkcijų, veikiančių kartu, rinkinys, kai kintamiesiems nėra priskirtos vertės. Kai kintamiesiems priskiriamos vertės, klasė tampa objektu. Skirtingos tos pačios klasės vertės suteikia skirtingus objektus; tai yra, skirtingi objektai yra ta pati klasė su skirtingomis vertėmis. Sakoma, kad objekto sukūrimas iš klasės yra objekto išradimas.







Pavadinimas, unordered_map, yra klasė. Objektas, sukurtas iš klasės „unordered_map“, turi programuotojo pasirinktą pavadinimą.



Funkcija, priklausanti klasei, reikalinga objektui iš klasės išvesti. C ++ ta funkcija turi tą patį pavadinimą kaip ir klasės pavadinimas. Iš klasės sukurti (atkurti) objektai turi skirtingus pavadinimus, kuriuos jiems suteikė programuotojas.



Sukurti objektą iš klasės reiškia objekto konstravimą; tai taip pat reiškia akimirksnį.





„C ++“ programa, naudojanti „unordered_map“ klasę, prasideda šiomis eilutėmis failo viršuje:

#įtraukti
#įtraukti
naudojant vardų srities standartą;

Pirmoji eilutė skirta įėjimui/išėjimui. Antroji eilutė - leisti programai naudoti visas „unordered_map“ klasės funkcijas. Trečioji eilutė leidžia programai naudoti standartinėje vardų erdvėje esančius pavadinimus.



Funkcijos perkrovimas

Kai du ar daugiau skirtingų funkcijų parašų turi tą patį pavadinimą, sakoma, kad tas pavadinimas yra perkrautas. Kai iškviečiama viena funkcija, argumentų skaičius ir tipas nustato, kuri funkcija iš tikrųjų vykdoma.

Statyba/kopijavimas

Paprasta konstrukcija

Nesutvarkytą žemėlapį galima sukurti ir jam priskirti vertes taip:

unordered_map<konst anglis*, konst anglis*>umap;

umap['bananas'] = 'geltona';
umap['Vynuogė'] = 'žalias';
umap['fig'] = 'violetinė';

Deklaracija prasideda nuo šablono specializacijos su raktų ir verčių porų tipais. Po to nurodomas programuotojo pasirinktas žemėlapio pavadinimas; tada kabliataškiu. Antrasis kodo segmentas parodo, kaip priskirti reikšmes jų raktams.
Statyba pagal „Initializer_list“
Tai galima padaryti taip:

unordered_map<konst anglis*, konst anglis*>umap({{'bananas', 'geltona'},
{'Vynuogė', 'žalias'}, {'fig', 'violetinė'}});

Statyba priskiriant Initializer_list
Pavyzdys:

unordered_map<konst anglis*, konst anglis*>umap= {{'bananas', 'geltona'},
{'Vynuogė', 'žalias'}, {'fig', 'violetinė'}};

Konstrukcija kopijuojant kitą neorganizuotą žemėlapį
Pavyzdys:

unordered_map<konst anglis*, konst anglis*>umap1({{'bananas', 'geltona'},
{'Vynuogė', 'žalias'}, {'fig', 'violetinė'}});
unordered_map<konst anglis*, konst anglis*>umap2(umap1);

Elementų pora

Šis kodas parodo, kaip sukurti ir pasiekti poros elementą:

pora<anglis, konst anglis*>pr= {„d“, 'būti'};
kaina<<pr.Pirmas << ' n';
kaina<<pr.antra << ' n';

Išėjimas yra:

d
būti

pirmasis ir antrasis yra rezervuoti žodžiai dviem poros elementams. Poros reikšmes vis tiek galima pakeisti naudojant pirmą ir antrą.

Netvarkingo žemėlapio temoje vadinama pora „value_type“.

unordered_map Prieiga prie elemento

maped_pepe & operator [] (key_type && k)
Grąžina atitinkamo rakto vertę. Pavyzdys:

unordered_map<konst anglis*, konst anglis*>umap;

umap['bananas'] = 'geltona';
umap['Vynuogė'] = 'žalias';
umap['fig'] = 'violetinė';

konst anglis *teisingai=umap['Vynuogė'];

kaina<<teisingai<<' n';

Išvestis yra: žalia. Vertes galima priskirti tuo pačiu būdu - žr. Aukščiau.

unordered_map Talpa

size_type size () const noexcept
Grąžina porų skaičių žemėlapyje.

unordered_map<konst anglis*, konst anglis*>umap;

umap['bananas'] = 'geltona';
umap['Vynuogė'] = 'žalias';
umap['fig'] = 'violetinė';

kaina<<umap.dydžio() <<' n';

Išėjimas yra 3.

bool empty () const noexcept

Grąžina 1, jei tiesa, jei žemėlapyje nėra poros, ir 0, jei yra porų, nurodo klaidingą. Pavyzdys:

unordered_map<konst anglis*, konst anglis*>umap;
kaina<<umap.tuščia() <<' n';

Išėjimas yra 1.

Grįžtantys kartotojai ir neužsakytų žemėlapių klasė

Iteratorius yra kaip rodyklė, tačiau turi daugiau funkcijų nei rodyklė.

begin () noexcept

Grąžina iteratorių, kuris nurodo į pirmąją žemėlapio objekto porą, kaip nurodyta šiame kodo segmente:

unordered_map<konst anglis*, konst anglis*>umap;

umap['bananas'] = 'geltona';umap['Vynuogė'] = 'žalias';umap['fig'] = 'violetinė';

unordered_map<konst anglis*, konst anglis*> ::iteratoriusiter=umap.pradėti();
pora<konst anglis*, konst anglis*>pr= *iter;
kaina<<pr.Pirmas << ',' <<pr.antra << ' n';

Išėjimas yra: fig, violetinė. Žemėlapis nėra užsakytas.

begin () const noexcept;

Grąžina iteratorių, kuris nurodo į pirmąjį žemėlapio objektų rinkinio elementą. Kai prieš objekto konstrukciją yra const, vietoj begin () vykdoma išraiška begin () const. Esant tokioms sąlygoms, objekto elementų negalima keisti. Pavyzdžiui, jis naudojamas šiame kode.

konstunordered_map<konst anglis*, konst anglis*>umap({{'bananas', 'geltona'},
{'Vynuogė', 'žalias'}, {'fig', 'violetinė'}});

unordered_map<konst anglis*, konst anglis*> ::const_iteratoriter=umap.pradėti();
pora<konst anglis*, konst anglis*>pr= *iter;
kaina<<pr.Pirmas << ',' <<pr.antra << ' n';

Išėjimas yra: fig, violetinė. Žemėlapis nėra užsakytas. Atminkite, kad grąžintam iteratoriui gauti šį kartą buvo naudojamas „const_iterator“, o ne tik iteratorius.

end () noexcept

Grąžina iteratorių, nurodantį iškart už paskutinio žemėlapio objekto elemento.

end () const noexcept

Grąžina iteratorių, nurodantį iškart už paskutinio žemėlapio objekto elemento. Kai prieš žemėlapio objekto konstrukciją yra konst, vietoj pabaigos () vykdoma išraiška end () const.

„unordered_map“ operacijos

iteratoriaus paieška (const key_type & k)

Žemėlapyje ieško duoto rakto poros. Jei jis randamas, jis grąžina iteratorių. Jei nerandama, ji grąžina kartotuvą, kuris nurodo žemėlapio pabaigą, o tai nėra pora. Šis kodas parodo, kaip naudotis šia nario funkcija:

unordered_map<anglis,anglis>umap;

umap['iki'] = „b“;umap[„c“] = „d“;umap['Ir'] = „f“;

unordered_map<anglis,anglis> ::iteratoriusiter=umap.rasti(„c“);
jei (umap.rasti(„c“) ! =umap.galas())
{
pora<anglis,anglis>pr= *iter;
kaina<<pr.Pirmas << ',' <<pr.antra << ' n';
}

Išvestis yra: c, d

const_iterator rasti (const key_type & k) const;

Ši funkcijos versija vadinama, jei netvarkingo žemėlapio kūrimas prasideda konst, todėl visi žemėlapio elementai yra tik skaitomi.

unordered_map Modifiers

poros intarpas (value_type && obj)
Netvarkingas žemėlapis reiškia, kad poros nėra jokia tvarka. Taigi, programa įterpia porą į bet kurią patogią vietą. Funkcija grįžta, suporuokite. Jei įterpimas buvo sėkmingas, bool bus 1, jei bus teisinga, kitaip - 0, jei bus klaidinga. Jei įterpimas buvo sėkmingas, iteratorius nurodys naujai įterptą elementą. Šis kodas iliustruoja naudojimą:

unordered_map<konst anglis*, konst anglis*>umap;

umap['bananas'] = 'geltona';
umap['Vynuogė'] = 'žalias';
umap['fig'] = 'violetinė';

umap.Įdėti({{'vyšnia', 'tinklas'}, {'braškė', 'tinklas'}});

kaina<<umap.dydžio() << ' n';

Išvestis: 5. Galima įterpti daugiau nei vieną porą.

size_type trinti (const key_type & k)

Ši funkcija ištrina porą iš „unordered_map“. Šis kodo segmentas iliustruoja:

unordered_map<konst anglis*, konst anglis*>umap;

umap['bananas'] = 'geltona';
umap['Vynuogė'] = 'žalias';
umap['fig'] = 'violetinė';

tarptant vieno=umap.ištrinti('Vynuogė');

kaina<<umap.dydžio() << ' n';

Išėjimas yra 2.
anuliuoti apsikeitimą („unordered_map &“)
Galima pakeisti du netvarkingus žemėlapius, kaip parodyta šiame kodo segmente:

unordered_map<konst anglis*, konst anglis*>umap1= {{'bananas', 'geltona'},
{'Vynuogė', 'žalias'}, {'fig', 'violetinė'}, {'braškė', 'tinklas'}};

unordered_map<konst anglis*, konst anglis*>umap2= {{'vyšnia', 'tinklas'}, {'liepa', 'žalias'}};

umap1.apsikeisti(umap2);

unordered_map<konst anglis*, konst anglis*> ::iteratoriusiter1=umap1.pradėti();
pora<konst anglis*, konst anglis*>pr1= *iter1;
unordered_map<konst anglis*, konst anglis*> ::iteratoriusiter2=umap2.pradėti();
pora<konst anglis*, konst anglis*>pr2= *iter2;

kaina<< 'Pirmasis raktas ir umap1 dydis:'<<pr1.Pirmas <<','<<umap1.dydžio() << ' n';
kaina<< „Pirmasis raktas ir„ umap2 “dydis“<<pr2.Pirmas <<','<<umap2.dydžio() << ' n';
unordered_map<konst anglis*, konst anglis*>umap1= {{'bananas', 'geltona'},
{'Vynuogė', 'žalias'}, {'fig', 'violetinė'}, {'braškė', 'tinklas'}};
unordered_map<konst anglis*, konst anglis*>umap2= {{'vyšnia', 'tinklas'}, {'liepa', 'žalias'}};

umap1.apsikeisti(umap2);

unordered_map<konst anglis*, konst anglis*> ::iteratoriusiter1=umap1.pradėti();
pora<konst anglis*, konst anglis*>pr1= *iter1;
unordered_map<konst anglis*, konst anglis*> ::iteratoriusiter2=umap2.pradėti();
pora<konst anglis*, konst anglis*>pr2= *iter2;

kaina<< 'Pirmasis raktas ir umap1 dydis:'<<pr1.Pirmas <<','<<umap1.dydžio() << ' n';
kaina<< „Pirmasis raktas ir„ umap2 “dydis“<<pr2.Pirmas <<','<<umap2.dydžio() << ' n';

Išėjimas yra:

Pirmasis raktas ir umap1 dydis: kalkės, 2

Pirmasis „umap2“ braškių raktas ir dydis, 4

Žemėlapis nėra užsakytas. Atminkite, kad prireikus žemėlapio ilgis padidinamas. Duomenų tipai turi būti vienodi.

Klasė ir jos įdiegti objektai

Reikšmė yra duomenų tipui, kaip momentinis objektas - klasei. Netvarkinga žemėlapio konstrukcija taip pat gali priimti klasę kaip duomenų tipą. Toliau pateikta programa tai iliustruoja:

#įtraukti
#įtraukti
naudojant vardų srities standartą;

klasė „TheCla“
{
viešas:
tarptant vieno;
statinis anglisch;

tuštumafunkcija(anglisne, konst anglis *p)
{
kaina<< 'Yra' <<ant vieno<< „vertos knygos“ <<ne<<p<< ' parduotuvėje.' << ' n';
}
statinis tuštumalinksma(anglisch)
{
jei (ch== 'iki')
kaina<< „Oficiali statinio nario funkcija“ << ' n';
}
};

tarptpagrindinis()
{
TheCla obj1;TheCla obj2;„TheCla obj3“;TheCla obj4;„TheCla obj5“;

unordered_map<konst anglis*,TheCla>umap;
umap= {{'bananas',obj1}, {'Vynuogė',obj2}, {'fig',obj3}, {'braškė',obj4}, {'liepa',obj5}};

kaina<<umap.dydžio() << ' n';

grįžti 0;
}

Išėjimas yra: 5.

Klasės apibrėžimas turi du duomenų viešuosius narius ir dvi viešojo nario funkcijas. Naudojant pagrindinę () funkciją, klasifikuojami skirtingi klasės objektai. Tada parodomas netvarkingas žemėlapis, kuriame kiekviena pora susideda iš vaisiaus pavadinimo ir objekto iš klasės. Rodomas žemėlapio dydis. Programa sudaroma be įspėjimo ar klaidos pranešimo.

Žemėlapio taikymas

Masyvas susieja indeksą su verte. Raktų/verčių poros egzistuoja daugelyje gyvenimo situacijų, kurias galima užprogramuoti. Pagrindinė vaisių/spalvų pora yra tik vienas pavyzdys. Kitas pavyzdys - žmonių vardai ir amžius. Šiuo atveju pora bus tipo, pora. Tai taip pat gali būti pora. Pastaruoju atveju bus taikoma išankstinio apdorojimo direktyva. Raktų/vertybių pora vis tiek gali būti susituokusių porų vardai. Šalyse, kuriose yra poligamija, vienam vyrui bus skirtingos žmonos.

Žemėlapio formavimas

Žemėlapis nėra dvimatis masyvas su dviem stulpeliais. Žemėlapis veikia su maišos funkcija. Raktas užkoduotas maišos funkcija į masyvo sveikąjį skaičių. Būtent šis masyvas turi vertybes. Taigi, iš tikrųjų yra vienas masyvas su reikšmėmis, o raktai yra susieti su masyvo indeksais, todėl nustatomi raktų ir verčių atitikimai. Maišymas yra plati tema ir šiame straipsnyje neaptariama.

Išvada

Žemėlapis, taip pat žinomas kaip asociatyvus masyvas, yra elementų sąrašas, kuriame kiekvienas elementas yra raktų/verčių pora. Taigi kiekvienas raktas atitinka tam tikrą vertę. „C ++“ žemėlapis įgyvendinamas kaip duomenų struktūra su narių funkcijomis ir operatoriais. Užsakytas žemėlapis yra tas, kuriame elementų poros buvo užsakytos raktais. Netvarkingas žemėlapis yra tas, kuriame nėra užsakymų.

Techniškai maišą sudaro poros elementai. Tiesą sakant, pora yra visa duomenų struktūra su jos narių funkcijomis ir operatoriais. Du poros šablono parametrai yra tie patys du „unordered_map“ šablono parametrai.

Žemėlapio inicializatoriaus_raštis yra literalų masyvas. Kiekvienas vidinis literalas susideda iš dviejų objektų - rakto/vertės poros.

„Unordered_map“ narių funkcijas ir operatorius galima suskirstyti į šias antraštes: „unordered_map construction/copy konstring“, „unordered_map Capacity“, „unordered_map“ iteratorius, „unordered_map Operations“ ir „unordered_map Modifiers“.

Nesutvarkytas žemėlapis naudojamas, kai raktas turi būti susietas su verte.

Chrys