C ++

Kā izmantot C ++ nesakārtotu karti

Kā izmantot C ++ nesakārtotu karti
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. Dažādiem taustiņiem var būt vienāda vērtība parastam darbam. Piemēram, taustiņi var būt augļu saraksts un atbilstošās vērtības, augļu krāsas. 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 kārtības. Šajā rakstā ir paskaidrots, kā izmantot C ++ nesakārtotu karti, kas rakstīta kā nepasūtīta karte. Lai saprastu šo rakstu, jums ir nepieciešamas zināšanas C ++ rādītājos. unordered_map ir daļa no C ++ standarta bibliotēkas.

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

nesakārtots_karte umap ("banāns", "dzeltens",
"vīnoga", "zaļa", "vīģe", "violeta");

Konstrukcija, piešķirot Initializer_list
Piemērs:

nesakārtots_karte umap = "banāns", "dzeltens",
"vīnoga", "zaļa", "vīģe", "violeta";

Konstrukcija, nokopējot citu nepasūtītu_karti
Piemērs:

nesakārtots_karte umap1 ("banāns", "dzeltens",
"vīnoga", "zaļa", "vīģe", "violeta");
nesakārtots_karte umap2 (umap1);

Pāris Elements

Šis kods parāda, kā izveidot un piekļūt pāra elementam:

pāris pr = 'd', "jūra";
cout << pr.first << '\n';
cout << pr.second << '\n';

Rezultāts ir:

d
jū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:

nesakārtots_karte umap;
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ē.

nesakārtots_karte umap;
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_karte umap;
cout << 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_karte umap;
umap ["banāns"] = "dzeltens"; umap ["vīnogu"] = "zaļš"; umap ["fig"] = "violets";
nesakārtots_karte:: iterators iter = umap.sākt ();
pāris pr = * atkārtot;
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 umap ("banāns", "dzeltens",
"vīnoga", "zaļa", "vīģe", "violeta");
nesakārtots_karte:: const_iterator iter = umap.sākt ();
pāris pr = * atkārtot;
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_karte umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
nesakārtots_karte:: iterators iter = umap.atrast ('c');
ja (umap.atrast ('c') != umap.beigas ())

pāris pr = * atkārtot;
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 ievietot (vērtības_tips && obj)
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. Ja ievietošana bija veiksmīga, bool vērtība būs 1, ja vērtība ir true, pretējā gadījumā vērtība 0 būs nepatiesa. Ja ievietošana ir veiksmīga, atkārtotājs norāda uz tikko ievietoto elementu. Lietošanu ilustrē šāds kods:

nesakārtots_karte umap;
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_karte umap;
umap ["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ā:

nesakārtots_karte umap1 = "banāns", "dzeltens",
"vīnoga", "zaļa", "vīģe", "violeta", "zemene", "sarkana";
nesakārtots_karte umap2 = "ķirsis", "sarkans", "kaļķis", "zaļš";
umap1.mijmaiņa (umap2);
nesakārtots_karte:: iterators iter1 = umap1.sākt ();
pāris pr1 = * iter1;
nesakārtots_karte:: iterators iter2 = umap2.sākt ();
pāris 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';
nesakārtots_karte umap1 = "banāns", "dzeltens",
"vīnoga", "zaļa", "vīģe", "violeta", "zemene", "sarkana";
nesakārtots_karte umap2 = "ķirsis", "sarkans", "kaļķis", "zaļš";
umap1.mijmaiņa (umap2);
nesakārtots_karte:: iterators iter1 = umap1.sākt ();
pāris pr1 = * iter1;
nesakārtots_karte:: iterators iter2 = umap2.sākt ();
pāris 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';

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;
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. Tas var būt arī pāris. Pēdējā gadījumā tiks izmantota pirmapstrādes direktīva. Atslēgu / vērtību pāris joprojām var būt precētu pāru vārdi. Valstīs, kur pastāv daudzsievība, vienam vīrietim būs dažādas sievas.

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 elementi. Faktiski pāris ir vesela datu struktūra ar tās dalībnieka funkcijām un operatoriem. Divi veidņu parametri pārim ir tie paši divi veidnes parametri unordered_map.

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

Labākie Linux spēļu konsoles emulatori
Šajā rakstā tiks uzskaitīta populārā Linux spēļu konsoles atdarināšanas programmatūra. Emulācija ir programmatūras saderības slānis, kas atdarina spēļ...
Labākie Linux spēļu draiveri 2021. gadā
Linux operētājsistēma ir gājusi tālu no sākotnējā, vienkāršā uz serveriem balstītā izskata. Šī operētājsistēma pēdējos gados ir ārkārtīgi uzlabojusies...
Kā tvert un straumēt spēļu sesiju operētājsistēmā Linux
Agrāk spēļu spēlēšana tika uzskatīta tikai par hobiju, taču laika gaitā spēļu industrija piedzīvoja milzīgu tehnoloģiju un spēlētāju skaita pieaugumu....