Klase un objekti
Klase ir mainīgo un funkciju kopums, kas darbojas kopā, kur mainīgajiem nav piešķirtu vērtību. Kad mainīgajiem tiek piešķirtas vērtības, klase kļūst par objektu. Dažādas vērtības, kas piešķirtas tai pašai klasei, rada dažādus objektus; tas ir, dažādi objekti ir viena klase ar atšķirīgām vērtībām. Tiek teikts, ka objekta izveide no klases ir objekta tūlītēja aktivizēšana.
Nosaukums unordered_map ir klase. Objektam, kas izveidots no klases unordered_map, ir izvēlēts programmētāja vārds.
Funkcija, kas pieder klasei, ir vajadzīga, lai no klases izveidotu objektu. Programmā C ++ šai funkcijai ir tāds pats nosaukums kā klases nosaukumam. Objektiem, kas izveidoti (eksemplāri) no klases, tos piešķir dažādi programmētāja nosaukumi.
Objekta izveide no klases nozīmē objekta konstruēšanu; tas nozīmē arī momentāno.
C ++ programma, kas izmanto klasi unordered_map, sākas ar šādām rindiņām faila augšdaļā:
# iekļaut# iekļaut
izmantojot nosaukumvietu std;
Pirmā rinda ir paredzēta ievadei / izvadei. Otrajā rindā ir jāļauj programmai izmantot visas klases unordered_map funkcijas. Trešā rinda ļauj programmai izmantot nosaukumus standarta nosaukumvietā.
Funkcijas pārslodze
Ja diviem vai vairākiem dažādu funkciju parakstiem ir vienāds nosaukums, tiek uzskatīts, ka šis nosaukums ir pārslogots. Izsaucot vienu funkciju, argumentu skaits un veids nosaka, kura funkcija tiek faktiski izpildīta.
Celtniecības / kopiju konstruēšana
Vienkārša konstrukcija
Nesakārtotu karti var izveidot un piešķirt vērtības šādi:
nesakārtots_karteumap ["banāns"] = "dzeltens";
umap ["vīnogu"] = "zaļš";
umap ["fig"] = "violets";
Deklarācija sākas ar veidņu specializāciju ar atslēgu un vērtību pāru veidiem. Pēc tam seko programmētāja izvēlētais kartes nosaukums; tad semikols. Otrais kodu segments parāda, kā piešķirt vērtības viņu atslēgām.
Būvniecība pēc Initializer_list
To var izdarīt šādi:
"vīnoga", "zaļa", "vīģe", "violeta");
Konstrukcija, piešķirot Initializer_list
Piemērs:
"vīnoga", "zaļa", "vīģe", "violeta";
Konstrukcija, nokopējot citu nepasūtītu_karti
Piemērs:
"vīnoga", "zaļa", "vīģe", "violeta");
nesakārtots_karte
Pāris Elements
Šis kods parāda, kā izveidot un piekļūt pāra elementam:
pāriscout << pr.first << '\n';
cout << pr.second << '\n';
Rezultāts ir:
djūra
pirmais un otrais ir rezervēti vārdi diviem pāra priekšmetiem. Pāra vērtības joprojām var mainīt, izmantojot pirmo un otro.
Nesakārtotās kartes tēmā tiek saukts pāris, value_type.
unordered_map Piekļuve elementam
kartētais_tips un operators [] (atslēgas_tips && k)
Atgriež atbilstošās atslēgas vērtību. Piemērs:
umap ["banāns"] = "dzeltens";
umap ["vīnogu"] = "zaļš";
umap ["fig"] = "violets";
const char * ret = umap ["vīnogu"];
cout << ret <<'\n';
Rezultāts ir: “zaļš”. Vērtības var piešķirt tāpat - skatīt iepriekš.
unordered_map Jauda
size_type size () const noexcept
Atgriež pāru skaitu kartē.
umap ["banāns"] = "dzeltens";
umap ["vīnogu"] = "zaļš";
umap ["fig"] = "violets";
cout << umap.size() <<'\n';
Rezultāts ir 3.
bool tukšs () const noexcept
Atgriež 1 par true, ja kartei nav pāra, un 0 par false, ja tai ir pāri. Piemērs:
nesakārtots_kartecout << umap.empty() <<'\n';
Rezultāts ir 1.
Atgriešanās atkārtotāji un karte, kuras karte nav sakārtota
Iterators ir kā rādītājs, bet tam ir lielāka funkcionalitāte nekā rādītājam.
sākt () noexcept
Atgriež atkārtotāju, kas norāda uz kartes objekta pirmo pāri, kā tas ir šajā kodu segmentā:
nesakārtots_karteumap ["banāns"] = "dzeltens"; umap ["vīnogu"] = "zaļš"; umap ["fig"] = "violets";
nesakārtots_karte
pāris
cout << pr.first << ", " << pr.second << '\n';
Rezultāts ir: figūra, violeta. Karte nav pasūtīta.
sākt () const noexcept;
Atgriež atkārtotāju, kas norāda uz pirmo kartes objektu kolekcijas elementu. Kad objekta konstrukcijas priekšā ir konst, izpildījuma “begin ()” vietā tiek izpildīts izteiciens “begin () const”. Saskaņā ar šo nosacījumu objekta elementus nevar modificēt. Tas tiek izmantots, piemēram, šajā kodā.
const unordered_map"vīnoga", "zaļa", "vīģe", "violeta");
nesakārtots_karte
pāris
cout << pr.first << ", " << pr.second << '\n';
Rezultāts ir: figūra, violeta. Karte nav pasūtīta. Ņemiet vērā, ka atgrieztā iteratora saņemšanai šoreiz tika izmantots const_iterator, nevis tikai iterators.
beigas () noexcept
Atgriež atkārtotāju, kas norāda tieši aiz kartes objekta pēdējā elementa.
end () const noexcept
Atgriež atkārtotāju, kas norāda tieši aiz kartes objekta pēdējā elementa. Kad kartes objekta konstrukcijas priekšā ir konst, vārda “end ()” vietā tiek izpildīts izteiciens “end () const”.
unordered_map Operācijas
iteratora atrašana (konst key_type & k)
Kartē meklē dotā taustiņa pāri. Ja tas ir atrasts, tas atgriež iteratoru. Ja tas nav atrasts, tas atgriež atkārtotāju, kas norāda uz kartes beigām, kas nav pāri. Šis kods parāda, kā izmantot šo dalībnieka funkciju:
nesakārtots_karteumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
nesakārtots_karte
ja (umap.atrast ('c') != umap.beigas ())
pāris
cout << pr.first << ", " << pr.second << '\n';
Rezultāts ir: c, d
const_iterator atrast (konst key_type & k) const;
Šī funkcijas versija tiek izsaukta, ja nesakārtotas kartes izveidošana sākas ar const, padarot visus kartes elementus tikai lasāmus.
unordered_map modifikatori
pāris
Nesakārtota karte nozīmē, ka pāri nav kādā secībā. Tātad, programma ievieto pāri jebkurā vietā, kas viņai šķiet ērta. Funkcija atgriežas, pāris
umap ["banāns"] = "dzeltens";
umap ["vīnogu"] = "zaļš";
umap ["fig"] = "violets";
umap.ievietot ("ķirsis", "sarkans", "zemeņu", "sarkans");
cout << umap.size() << '\n';
Rezultāts ir: 5. Var ievietot vairāk nekā vienu pāri.
size_type dzēst (const key_type & k)
Šī funkcija izdzēš pāri no unordered_map. Šis kodu kods ilustrē:
nesakārtots_karteumap ["banāns"] = "dzeltens";
umap ["vīnogu"] = "zaļš";
umap ["fig"] = "violets";
int num = umap.dzēst ("vīnogu");
cout << umap.size() << '\n';
Rezultāts ir 2.
void swap (unordered_map &)
Divas nesakārtotas kartes var apmainīt, kā parādīts šajā kodu segmentā:
"vīnoga", "zaļa", "vīģe", "violeta", "zemene", "sarkana";
nesakārtots_karte
umap1.mijmaiņa (umap2);
nesakārtots_karte
pāris
nesakārtots_karte
pāris
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
nesakārtots_karte
"vīnoga", "zaļa", "vīģe", "violeta", "zemene", "sarkana";
nesakārtots_karte
umap1.mijmaiņa (umap2);
nesakārtots_karte
pāris
nesakārtots_karte
pāris
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Rezultāts ir:
Pirmā atslēga un umap1 lielums: kaļķi, 2
Pirmā umap2 zemeņu atslēga un izmērs, 4
Karte nav pasūtīta. Ņemiet vērā, ka kartes garums, ja nepieciešams, tiek palielināts. Datu tipiem jābūt vienādiem.
Klase un tās tūlītējie objekti
Vērtība attiecas uz datu tipu, tāpat kā momentizēts objekts ir uz klasi. Nesakārtota kartes konstrukcija var arī pieņemt klasi kā datu tipu. To ilustrē šāda programma:
# iekļaut# iekļaut
izmantojot nosaukumvietu std;
klase TheCla
publiski:
int num;
statiskā char ch;
void func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
statisks tukšums (char ch)
ja (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
nesakārtots_karte
umap = "banāns", obj1, "vīnoga", obj2, "fig", obj3, "zemene", obj4, "kaļķis", obj5;
cout << umap.size() << '\n';
atgriešanās 0;
Rezultāts ir: 5.
Klases definīcijai ir divi datu publiskie dalībnieki un divas publiskā dalībnieka funkcijas. Funkcijā main () tiek eksemplāri dažādi klases objekti. Pēc tam tiek izveidota nesakārtota karte, kurā katrs pāris sastāv no augļa nosaukuma un klases priekšmeta. Tiek parādīts kartes lielums. Programma apkopo bez brīdinājuma vai kļūdas ziņojuma.
Kartes pielietošana
Masīvs indeksu saista ar vērtību. Atslēgu / vērtību pāri pastāv daudzās dzīves situācijās, kuras var ieprogrammēt. Augļu / krāsu atslēgu / vērtību pāris ir tikai viens piemērs. Cits piemērs ir cilvēku vārds un viņu vecums. Šajā gadījumā pāris būs veida, pāris
Kartes veidošana
Karte nav divdimensiju masīvs ar divām kolonnām. Karte darbojas ar hash funkciju. Atslēga tiek kodēta ar hash funkciju masīva veselā skaitlī. Tieši šis masīvs tur vērtības. Tātad faktiski ir viens masīvs ar vērtībām, un atslēgas tiek piesaistītas masīva indeksiem, un tādējādi tiek veidotas atbilstības starp atslēgām un vērtībām. Jaukšana ir plaša tēma, un šajā rakstā tā nav apskatīta.
Secinājums
Karte, kas pazīstama arī kā asociatīvs masīvs, ir elementu saraksts, kur katrs elements ir atslēgu / vērtību pāris. Tātad, katra atslēga atbilst vērtībai. Programmā C ++ karte tiek ieviesta kā datu struktūra ar dalībnieka funkcijām un operatoriem. Sakārtota karte ir tā, kurā elementu pāri ir sakārtoti ar taustiņiem. Nesakārtota karte ir tāda, kur nav pasūtījuma.
Tehniski hash sastāv no pāra
Kartes inicializētāju_ saraksts ir burtiskais literāļu masīvs. Katrs iekšējais literālis sastāv no diviem objektiem - atslēgu / vērtību pāra.
Dalībnieka funkcijas un operatorus unordered_map var kategorizēt šādās sadaļās: unordered_map būvniecība / kopiju veidošana, unordered_map Capacity, unordered_map iterator, unordered_map Operations un unordered_map Modifiers.
Nesakārtota karte tiek izmantota, ja atslēga ir jāpiesaista vērtībai.
Chrys