Klass ja objektid
Klass on koos töötavate muutujate ja funktsioonide kogum, kus muutujatel pole väärtusi määratud. Kui muutujatele määratakse väärtused, saab klass objektiks. Samale klassile antud erinevad väärtused toovad kaasa erinevad objektid; see tähendab, et erinevad objektid on sama klass, millel on erinevad väärtused. Klassist objekti loomine öeldakse, et see kiirendab objekti.
Nimi unordered_map on klass. Klassist unordered_map loodud objektil on programmeerija valitud nimi.
Klassile kuuluva funktsiooni olemasolu on vajalik objekti klassist kiirendamiseks. C ++ versioonis on sellel funktsioonil sama nimi kui klassi nimel. Klassist loodud (instantsitud) objektidel on programmeerija poolt antud erinevad nimed.
Klassist objekti loomine tähendab objekti ehitamist; see tähendab ka kiirustamist.
C ++ programm, mis kasutab klassi unordered_map, algab faili ülaosas järgmiste ridadega:
# kaasata# kaasata
nimeruumi kasutamine std;
Esimene rida on sisendi / väljundi jaoks. Teine rida on lubada programmil kasutada klassi unordered_map kõiki funktsioone. Kolmas rida võimaldab programmil kasutada nimesid standardses nimeruumis.
Funktsiooni ülekoormamine
Kui kahel või enamal erineval funktsiooniallkirjal on sama nimi, öeldakse, et see nimi on ülekoormatud. Ühe funktsiooni kutsumisel määrake argumentide arv ja tüüp, milline funktsioon tegelikult täidetakse.
Ehituse / koopiate ehitamine
Lihtne ehitus
Järjestamata kaarti saab koostada ja neile väärtused anda järgmiselt:
tellimata_kaartumap ["banaan"] = "kollane";
umap ["viinamari"] = "roheline";
umap ["fig"] = "lilla";
Deklaratsioon algab malli spetsialiseerumisega võtme- ja väärtuspaaride tüüpidega. Sellele järgneb programmeerija poolt kaardile valitud nimi; siis semikoolon. Teine koodisegment näitab, kuidas nende võtmetele väärtusi omistada.
Ehitamine Initializer_list poolt
Seda saab teha järgmiselt:
"viinamari", "roheline", "viigimarja", "lilla");
Ehitamine, määrates Initializer_list
Näide:
"viinamari", "roheline", "viigimari", "lilla";
Ehitamine teise tellimata_kaardi kopeerimisega
Näide:
"viinamari", "roheline", "viigimari", "lilla");
tellimata_kaart
Paar Element
Järgmine kood näitab paari elemendi loomist ja sellele juurdepääsu:
paarcout << pr.first << '\n';
cout << pr.second << '\n';
Väljund on:
dmeri
esimene ja teine on reserveeritud sõnad paari kahele elemendile. Paaris olevaid väärtusi saab endiselt muuta, kasutades esimest ja teist.
Korrastamata kaardi teemas nimetatakse paari väärtus_tüüp.
unordered_map Juurdepääs elemendile
kaardistatud_tüüp ja operaator [] (võtme_tüüp && k)
Tagastab vastava võtme väärtuse. Näide:
umap ["banaan"] = "kollane";
umap ["viinamari"] = "roheline";
umap ["fig"] = "lilla";
const char * ret = umap ["viinamari"];
cout << ret <<'\n';
Väljund on: "roheline". Väärtusi saab omistada samamoodi - vt eespool.
unordered_map Mahutavus
size_type size () const noexcept
Tagastab paaride arvu kaardil.
umap ["banaan"] = "kollane";
umap ["viinamari"] = "roheline";
umap ["fig"] = "lilla";
cout << umap.size() <<'\n';
Väljund on 3.
bool tühi () const noexcept
Tagastab tõese 1, kui kaardil pole paari, ja 0 vale, kui paaril on paar. Näide:
tellimata_kaartcout << umap.empty() <<'\n';
Väljund on 1.
Naasvad itaatorid ja korrastamata kaardiga klass
Iteraator on nagu osuti, kuid sellel on rohkem funktsionaalsust kui kursoril.
alusta () noexcept
Tagastab iteraatori, mis osutab kaardiobjekti esimesele paarile nagu järgmises koodisegmendis:
tellimata_kaartumap ["banaan"] = "kollane"; umap ["viinamari"] = "roheline"; umap ["fig"] = "lilla";
tellimata_kaart
paar
cout << pr.first << ", " << pr.second << '\n';
Väljund on: joonis, lilla. Kaart on järjestamata.
begin () const noexcept;
Tagastab iteraatori, mis osutab kaardiobjektide kogu esimesele elemendile. Kui objektiehitusele eelneb const, käivitatakse väljendi „begin () const” asemel. Selles tingimuses ei saa objekti elemente muuta. Seda kasutatakse näiteks järgmises koodis.
const korrastamata_kaart"viinamari", "roheline", "viigimari", "lilla");
tellimata_kaart
paar
cout << pr.first << ", " << pr.second << '\n';
Väljund on: joonis, lilla. Kaart on järjestamata. Pange tähele, et tagastatud iteraatori vastuvõtmiseks on seekord lihtsalt iteratori asemel kasutatud const_iteratorit.
lõpp () noexcept
Tagastab iteraatori, mis osutab vahetult kaardiobjekti viimasest elemendist kaugemale.
end () const noexcept
Tagastab iteraatori, mis osutab vahetult kaardiobjekti viimasest elemendist kaugemale. Kui kaardiobjekti ehitamisele eelneb const, täidetakse väljendi „end ()” asemel väljend „end () const”.
operatsioonid unordered_map
iteraatori leid (const key_type & k)
Otsib kaardil etteantud võtme paari. Kui see leitakse, tagastab ta iteraatori. Kui seda ei leita, tagastab ta iteraatori, mis osutab kaardi lõpule, mis pole paar. Järgmine kood näitab, kuidas seda liikme funktsiooni kasutada:
tellimata_kaartumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
tellimata_kaart
kui (umap.leidma ('c') != umap.lõpp())
paar
cout << pr.first << ", " << pr.second << '\n';
Väljund on: c, d
const_iterator leidma (const key_type & k) const;
Seda funktsiooni versiooni nimetatakse juhul, kui korrastamata kaardi loomine algab const-ga, muutes kõik kaardi elemendid kirjutuskaitstuks.
unordered_map Teisendajad
paar
Järjestamata kaart tähendab, et paarid pole järjekorras. Niisiis, programm sisestab paari igasse kohta, mis talle sobib. Funktsioon naaseb, paaris
umap ["banaan"] = "kollane";
umap ["viinamari"] = "roheline";
umap ["fig"] = "lilla";
umap.sisesta ("kirss", "punane", "maasikas", "punane");
cout << umap.size() << '\n';
Väljund on: 5. Lisada saab rohkem kui ühte paari.
size_type kustuta (const key_type & k)
See funktsioon kustutab paar kaardist unordered_map. Järgmine koodisegment illustreerib:
tellimata_kaartumap ["banaan"] = "kollane";
umap ["viinamari"] = "roheline";
umap ["fig"] = "lilla";
int num = umap.kustutada ("viinamari");
cout << umap.size() << '\n';
Väljund on 2.
void swap (tellimata_kaart ja)
Kaks järjestamata kaarti saab vahetada, nagu on illustreeritud selles koodisegmendis:
"viinamari", "roheline", "viigimari", "lilla", "maasikas", "punane";
tellimata_kaart
umap1.vahetada (umap2);
tellimata_kaart
paar
tellimata_kaart
paar
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
tellimata_kaart
"viinamari", "roheline", "viigimari", "lilla", "maasikas", "punane";
tellimata_kaart
umap1.vahetada (umap2);
tellimata_kaart
paar
tellimata_kaart
paar
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Väljund on:
Esimene võti ja umap1 suurus: lubi, 2
Esimene võti ja umap2 maasika suurus, 4
Kaart on järjestamata. Pange tähele, et kaardi pikkust suurendatakse vajadusel. Andmetüübid peavad olema samad.
Klass ja selle kohesed objektid
Väärtus on andmetüübile, nagu instantsitud objekt klassile. Korrastamata kaardikonstruktsioon võib andmetüübina aktsepteerida ka klassi. Järgmine programm illustreerib seda:
# kaasata# kaasata
nimeruumi kasutamine std;
klass TheCla
avalik:
int number;
staatiline süsinik;
tühine func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
staatiline tühisus (char ch)
kui (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
tellimata_kaart
umap = "banaan", obj1, "viinamari", obj2, "fig", obj3, "maasikas", obj4, "lubi", obj5;
cout << umap.size() << '\n';
tagastama 0;
Väljund on: 5.
Klassimääratlusel on kaks avalike andmete liiget ja kaks avaliku liikme funktsiooni. Funktsioonis main () kiirendatakse klassi erinevaid objekte. Seejärel instantsitakse korrastamata kaart, kus iga paar koosneb puuvilja ja klassi objekti nimest. Kuvatakse kaardi suurus. Programm kompileerib hoiatuse ja veateateta.
Kaardi rakendamine
Massiiv seob indeksi väärtusega. Võtme / väärtuse paarid on elus paljudes olukordades olemas, mida saab programmeerida. Puu / värvi võti / väärtus paar on vaid üks näide. Teine näide on inimeste nimi ja vanus. Sel juhul on paar tüüp, paar
Kaardi moodustamine
Kaart ei ole kahemõõtmeline massiiv, millel on kaks veergu. Kaart töötab räsifunktsiooniga. Võtme kodeerib räsifunktsioon massiivi täisarvuks. Väärtusi hoiab just see massiiv. Niisiis, väärtusega on tegelikult üks massiiv ja võtmed on kaardistatud massiivi indeksitega ja nii tehakse võtmete ja väärtuste vastavus. Räsimine on ulatuslik teema ja seda artiklit ei käsitleta.
Järeldus
Kaart, tuntud ka kui assotsiatiivne massiiv, on elementide loend, kus iga element on võtme / väärtuse paar. Niisiis, iga võti vastab väärtusele. C ++ versioonis on kaart rakendatud andmestruktuurina koos liikme funktsioonide ja operaatoritega. Järjestatud kaart on selline, kus elemendipaarid on klahvide abil järjestatud. Järjestamata kaart on selline, kus tellimist pole.
Tehniliselt koosneb räsi paarist
Kaardi initsialiseerija_loend on massiivi literaal. Iga sisemine literaal koosneb kahest objektist, võtme / väärtuse paarist.
Liikumefunktsioonid ja operaatorid järjestamata_kaardi jaoks saab liigitada järgmiste pealkirjade alla: tellimata_kaardi ehitamine / koopia koostamine, tellimata_kaardi maht, tellimata_kaardi iteraator, tellimata_kaardi toimingud ja järjestamata_kaardi modifikaatorid.
Järjestamata kaarti kasutatakse siis, kui võti tuleb kaardistada väärtusega.
Chrys