Klasė ir objektai
Klasė yra kintamųjų ir funkcijų rinkinys, veikiantis kartu, kai kintamieji neturi priskirtų reikšmių. Kai kintamiesiems priskiriamos reikšmė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 kuriant objektą iš klasės, objektas yra momentinis.
Pavadinimas, unordered_map, yra klasė. Objektas, sukurtas iš „unordered_map“ klasės, turi programuotojo pasirinktą vardą.
Klasei priklausanti funkcija reikalinga objektui iš klasės sukurti. Programoje C ++ ši funkcija turi tą patį pavadinimą kaip ir klasės pavadinimas. Objektai, sukurti (instancijuoti) iš klasės, turi skirtingus pavadinimus, kuriuos jiems suteikia programuotojas.
Objekto sukūrimas iš klasės reiškia objekto sukūrimą; tai taip pat reiškia akimirksnį.
C ++ programa, naudojanti „unordered_map“ klasę, prasideda šiomis eilutėmis failo viršuje:
# įtraukti# įtraukti
naudojant vardų sritį std;
Pirmoji eilutė skirta įvesties / išvesties. Antroji eilutė - leisti programai naudoti visas „unordered_map“ klasės ypatybes. Trečioji eilutė leidžia programai naudoti vardus standartinėje vardų srityje.
Funkcijos perkrova
Kai du ar daugiau skirtingų funkcijų parašų turi tą patį pavadinimą, sakoma, kad šis vardas perkrautas. Kai iškviečiama viena funkcija, argumentų skaičius ir tipas nustato, kuri funkcija iš tikrųjų vykdoma.
Konstrukcijos / kopijos statyba
Paprasta konstrukcija
Nesutvarkytą žemėlapį galima susikurti ir priskirti reikšmes taip:
neužsakytas_žemėlapisumap ["bananas"] = "geltonas";
umap ["vynuogė"] = "žalia";
umap ["fig"] = "violetinė";
Deklaracija prasideda šablonų specializacija, nurodant raktų ir reikšmių porų tipus. Po to nurodomas programuotojo pasirinktas žemėlapio pavadinimas; tada kabliataškis. Antrasis kodo segmentas parodo, kaip priskirti reikšmes jų raktams.
Statyba pagal „Initializer_list“
Tai galima padaryti taip:
"vynuogė", "žalia", "fig", "violetinė");
Konstrukcija priskiriant Initializer_list
Pavyzdys:
"vynuogė", "žalia", "fig", "violetinė";
Statyba nukopijuojant kitą nesutvarkytą žemėlapį
Pavyzdys:
"vynuogė", "žalia", "fig", "violetinė");
neužsakytas_žemėlapis
Pora Elementas
Šis kodas parodo, kaip sukurti ir pasiekti poros elementą:
poracout << pr.first << '\n';
cout << pr.second << '\n';
Rezultatas yra:
djūra
pirmas ir antras yra rezervuoti žodžiai dviem poros elementams. Poros reikšmes vis tiek galima pakeisti naudojant pirmąjį ir antrąjį.
Nesutvarkyto žemėlapio temoje vadinama pora „value_type“.
unordered_map Prieiga prie elemento
„mapped_type“ ir operatorius [] („key_type“ && k)
Grąžina atitinkamo rakto vertę. Pavyzdys:
umap ["bananas"] = "geltonas";
umap ["vynuogė"] = "žalia";
umap ["fig"] = "violetinė";
const char * ret = umap ["vynuogė"];
cout << ret <<'\n';
Rezultatas: „žalia“. Vertybės gali būti priskirtos tokiu pačiu būdu - žr. Aukščiau.
unordered_map Talpa
size_type dydis () const noexcept
Pateikia porų skaičių žemėlapyje.
umap ["bananas"] = "geltonas";
umap ["vynuogė"] = "žalia";
umap ["fig"] = "violetinė";
cout << umap.size() <<'\n';
Rezultatas yra 3.
Bool tuščias () const noexcept
Grąžina 1 už „true“, jei žemėlapyje nėra poros, ir 0 už „false“, jei jis turi poras. Pavyzdys:
neužsakytas_žemėlapiscout << umap.empty() <<'\n';
Rezultatas yra 1.
Grįžtantys iteratoriai ir nesutvarkytų žemėlapių klasė
Iteratorius yra tarsi rodyklė, tačiau turi daugiau funkcijų nei rodyklė.
pradėti () noexcept
Grąžina iteratorių, nukreipiantį į pirmąją žemėlapio objekto porą, kaip šiame kodo segmente:
neužsakytas_žemėlapisumap ["bananas"] = "geltonas"; umap ["vynuogė"] = "žalia"; umap ["fig"] = "violetinė";
neužsakytas_žemėlapis
pora
cout << pr.first << ", " << pr.second << '\n';
Rezultatas: figūra, violetinė. Žemėlapis nėra užsakytas.
pradėti () const noexcept;
Grąžina iteratorių, kuris nurodo pirmąjį žemėlapio objektų kolekcijos elementą. Kai prieš objekto konstrukciją yra „const“, vietoj „begin ()“ vykdoma išraiška „begin () const“. Esant tokiai sąlygai, objekto elementų modifikuoti negalima. Pavyzdžiui, jis naudojamas šiame kode.
const unordered_map"vynuogė", "žalia", "fig", "violetinė");
neužsakytas_žemėlapis
pora
cout << pr.first << ", " << pr.second << '\n';
Rezultatas: figūra, violetinė. Žemėlapis nėra užsakytas. Atkreipkite dėmesį, kad grąžinamam iteratoriui priimti šį kartą buvo naudojamas „const_iterator“, o ne tik iteratorius.
pabaiga () noexcept
Pateikia iteratorių, kuris nurodo iškart už paskutinio žemėlapio objekto elemento.
end () const noexcept
Pateikia iteratorių, kuris nurodo iškart už paskutinio žemėlapio objekto elemento. Kai prieš žemėlapio objekto konstrukciją yra „const“, vietoj „end ()“ vykdoma išraiška „end () const“.
unordered_map operacijos
iteratoriaus radimas (const key_type & k)
Žemėlapyje ieško nurodyto rakto poros. Jei jis bus rastas, jis grąžins iteratorių. Jei nerandama, jis pateikia iteratorių, kuris nurodo žemėlapio galą, kuris nėra pora. Šis kodas parodo, kaip naudoti šią nario funkciją:
neužsakytas_žemėlapisumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
neužsakytas_žemėlapis
jei (umap.rasti („c“) != umap.galas())
pora
cout << pr.first << ", " << pr.second << '\n';
Išvestis yra: c, d
const_iterator rasti (const key_type & k) const;
Ši funkcijos versija vadinama, jei nesutvarkyto žemėlapio kūrimas prasideda konst, todėl visi žemėlapio elementai tampa tik skaitomi.
unordered_map modifikatoriai
pora
Nesutvarkytas žemėlapis reiškia, kad poros nėra jokia tvarka. Taigi, programa įterpia porą bet kurioje jai patogioje vietoje. Funkcija grįžta, suporuokite
umap ["bananas"] = "geltonas";
umap ["vynuogė"] = "žalia";
umap ["fig"] = "violetinė";
umap.įterpti ("vyšnia", "raudona", "braškė", "raudona");
cout << umap.size() << '\n';
Išvestis yra: 5. Galima įterpti daugiau nei vieną porą.
size_type ištrinti (const key_type & k)
Ši funkcija ištrina porą iš „unordered_map“. Šis kodo segmentas iliustruoja:
neužsakytas_žemėlapisumap ["bananas"] = "geltonas";
umap ["vynuogė"] = "žalia";
umap ["fig"] = "violetinė";
int num = umap.ištrinti („vynuogė“);
cout << umap.size() << '\n';
Rezultatas yra 2.
negaliojantis apsikeitimas (unordered_map &)
Du nesutvarkyti žemėlapiai gali būti sukeisti, kaip parodyta šiame kodo segmente:
"vynuogė", "žalia", "fig", "violetinė", "braškė", "raudona";
neužsakytas_žemėlapis
umap1.apsikeitimas (umap2);
neužsakytas_žemėlapis
pora
neužsakytas_žemėlapis
pora
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
neužsakytas_žemėlapis
"vynuogė", "žalia", "fig", "violetinė", "braškė", "raudona";
neužsakytas_žemėlapis
umap1.apsikeitimas (umap2);
neužsakytas_žemėlapis
pora
neužsakytas_žemėlapis
pora
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Rezultatas 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, jei reikia, žemėlapio ilgis padidinamas. Duomenų tipai turi būti vienodi.
Klasė ir jos momentiniai objektai
Vertė yra duomenų tipui, kaip momentinis objektas - klasei. Nesutvarkyta žemėlapio konstrukcija taip pat gali priimti klasę kaip duomenų tipą. Tai iliustruoja ši programa:
# įtraukti# įtraukti
naudojant vardų sritį std;
klasė „TheCla“
vieša:
int num;
statinis char ch;
negaliojantis func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
statinis tuštumas (char ch)
jei (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
neužsakytas_žemėlapis
umap = "bananas", obj1, "vynuogė", obj2, "fig", obj3, "braškė", obj4, "kalkės", obj5;
cout << umap.size() << '\n';
grąžinti 0;
Išvestis yra: 5.
Klasės apibrėžime yra du duomenų viešieji nariai ir dvi viešojo nario funkcijos. Pagrindinėje () funkcijoje yra skirtingi klasės objektai. Tuomet iš karto sutvarkomas nesutvarkytas žemėlapis, kuriame kiekvieną porą sudaro vaisiaus pavadinimas ir klasės objektas. Rodomas žemėlapio dydis. Programa kaupia be jokio įspėjimo ar klaidos pranešimo.
Žemėlapio taikymas
Masyvas susieja indeksą su verte. Raktų / vertybių poros egzistuoja daugelyje gyvenimo situacijų, kurias galima užprogramuoti. Pagrindinė vaisių / spalvų pora yra tik vienas pavyzdys. Kitas pavyzdys yra žmonių vardas ir jų amžius. Tokiu atveju pora bus tipo, pora
Žemėlapio formavimas
Žemėlapis nėra dviejų matmenų masyvas, turintis du stulpelius. Žemėlapis veikia su maišos funkcija. Raktas koduojamas funkcija maišos, į masyvo sveikąjį skaičių. Būtent šis masyvas turi vertes. Taigi, iš tikrųjų yra vienas masyvas su reikšmėmis, o raktai susiejami su masyvo rodikliais, todėl raktai ir reikšmės susiejami. Maišymas yra plati tema ir apie tai šiame straipsnyje nėra kalbama.
Išvada
Žemėlapis, dar vadinamas asociaciniu masyvu, yra elementų sąrašas, kur kiekvienas elementas yra raktų / reikšmių pora. Taigi, kiekvienas raktas atitinka vertę. C ++ sistemoje žemėlapis yra įgyvendinamas kaip duomenų struktūra su narių funkcijomis ir operatoriais. Sutvarkytas žemėlapis yra tas, kuriame elementų poros surikiuotos klavišais. Nesutvarkytas žemėlapis yra tas, kuriame nėra užsakymo.
Techniškai maiša susideda iš poros
Žemėlapio inicializatorių sąrašas yra masyvo pažodinis pažodinis. Kiekvieną vidinį literalą sudaro du objektai, raktų / reikšmių pora.
Narių funkcijas ir operatorius, skirtus „unordered_map“, galima suskirstyti į šias antraštes: unordered_map konstravimas / kopijos konstravimas, unordered_map talpa, unordered_map iteratorius, unordered_map operacijos ir unordered_map modifikatoriai.
Nesutvarkytas žemėlapis naudojamas, kai raktą reikia susieti su reikšme.
Chrys