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:
{'Vynuogė', 'žalias'}, {'fig', 'violetinė'}});
Statyba priskiriant Initializer_list
Pavyzdys:
{'Vynuogė', 'žalias'}, {'fig', 'violetinė'}};
Konstrukcija kopijuojant kitą neorganizuotą žemėlapį
Pavyzdys:
{'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:
dbū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:
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.
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ą:
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:
{'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