C ++

Kuidas kasutada C ++ korrastamata kaarti

Kuidas kasutada C ++ korrastamata kaarti
Kaart, tuntud ka kui assotsiatiivne massiiv, on elementide loend, kus iga element on võti / väärtus paar. Niisiis, iga võti vastab väärtusele. Erinevatel võtmetel võib tavalise töö jaoks olla sama väärtus. Näiteks võivad võtmed olla puuviljade loetelu ja vastavad väärtused, puuviljade värvid. C ++ versioonis on kaart rakendatud andmestruktuurina koos liikme funktsioonide ja operaatoritega. Järjestatud kaart on see, kus elemendipaarid on järjestatud klahvide abil. Järjestamata kaart on selline, kus pole järjekorda. Selles artiklis selgitatakse, kuidas kasutada järjestamata kaarti C ++, mis on kirjutatud kui järjestamata_kaart. Selle artikli mõistmiseks vajate teadmisi C ++ osutites. unordered_map on osa C ++ standardkogust.

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_kaart umap;
umap ["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:

tellimata_kaart umap ("banaan", "kollane",
"viinamari", "roheline", "viigimarja", "lilla");

Ehitamine, määrates Initializer_list
Näide:

tellimata_kaart umap = "banaan", "kollane",
"viinamari", "roheline", "viigimari", "lilla";

Ehitamine teise tellimata_kaardi kopeerimisega
Näide:

tellimata_kaart umap1 ("banaan", "kollane",
"viinamari", "roheline", "viigimari", "lilla");
tellimata_kaart umap2 (umap1);

Paar Element

Järgmine kood näitab paari elemendi loomist ja sellele juurdepääsu:

paar pr = 'd', "meri";
cout << pr.first << '\n';
cout << pr.second << '\n';

Väljund on:

d
meri

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:

tellimata_kaart umap;
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.

tellimata_kaart umap;
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_kaart umap;
cout << 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_kaart umap;
umap ["banaan"] = "kollane"; umap ["viinamari"] = "roheline"; umap ["fig"] = "lilla";
tellimata_kaart:: iteraator iter = umap.algama ();
paar pr = * iter;
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 umap ("banaan", "kollane",
"viinamari", "roheline", "viigimari", "lilla");
tellimata_kaart:: const_iterator iter = umap.algama ();
paar pr = * iter;
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_kaart umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
tellimata_kaart:: iteraator iter = umap.leidma ('c');
kui (umap.leidma ('c') != umap.lõpp())

paar pr = * iter;
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 sisesta (väärtus_tüüp && obj)
Järjestamata kaart tähendab, et paarid pole järjekorras. Niisiis, programm sisestab paari igasse kohta, mis talle sobib. Funktsioon naaseb, paaris. Kui sisestamine õnnestus, on bool tõeseks väärtuseks 1, vastasel juhul oleks vale väärtuseks 0. Kui sisestamine õnnestub, osutab iteraator äsja sisestatud elemendile. Kasutamist illustreerib järgmine kood:

tellimata_kaart umap;
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_kaart umap;
umap ["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:

tellimata_kaart umap1 = "banaan", "kollane",
"viinamari", "roheline", "viigimari", "lilla", "maasikas", "punane";
tellimata_kaart umap2 = "kirss", "punane", "lubi", "roheline";
umap1.vahetada (umap2);
tellimata_kaart:: iteraator iter1 = umap1.algama ();
paar pr1 = * iter1;
tellimata_kaart:: iteraator iter2 = umap2.algama ();
paar pr2 = * iter2;
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 umap1 = "banaan", "kollane",
"viinamari", "roheline", "viigimari", "lilla", "maasikas", "punane";
tellimata_kaart umap2 = "kirss", "punane", "lubi", "roheline";
umap1.vahetada (umap2);
tellimata_kaart:: iteraator iter1 = umap1.algama ();
paar pr1 = * iter1;
tellimata_kaart:: iteraator iter2 = umap2.algama ();
paar pr2 = * iter2;
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;
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. See võib olla ka paariline. Viimasel juhul kasutatakse eeltöötlemise direktiivi. Võtme / väärtuspaariks võivad ikkagi olla abielupaaride nimed. Riikides, kus valitseb polügaamia, on ühe mehe jaoks erinevad naised.

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 elemendid. Tegelikult on paar terve andmestruktuur koos oma liikmete funktsioonide ja operaatoritega. Paari kaks malli parameetrit on ühed ja samad kaks malli parameetrit.

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

Viis parimat ergonoomilist arvutihiiretoodet Linuxile
Kas pikaajaline arvuti kasutamine põhjustab valu randmes või sõrmedes?? Kas teil on liigeste jäikus ja peate pidevalt käsi suruma? Kas tunnete põletav...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
X-Mouse Button Control abil saate hiire nupud erinevates tarkvarades erinevalt ümber teha
Võib-olla vajate tööriista, mis võiks muuta teie hiire juhtimissüsteemi iga kasutatava rakendusega. Sel juhul võite proovida rakendust nimega X hiiren...