Hvordan bruke C ++ uordnet kart

Hvordan bruke C ++ uordnet kart
Et kart, også kjent som et assosiativt utvalg er en liste over elementer, der hvert element er et nøkkel-/verdipar. Så hver tast tilsvarer en verdi. Ulike nøkler kan ha samme verdi, for vanlig arbeid. For eksempel kan nøklene være en liste over frukt og de tilsvarende verdiene, fargene på fruktene. I C ++ implementeres kartet som en datastruktur med medlemsfunksjoner og operatører. Et bestilt kart er et der elementparet er bestilt av nøkler. Et uordnet kart er et der det ikke er noen ordre. Denne artikkelen forklarer hvordan du bruker C ++ uordnet kart, skrevet som uordnede_map. Du trenger kunnskap i C ++ pekere for å forstå denne artikkelen. uordnede_map er en del av C ++ standardbiblioteket.

Klasse og gjenstander

En klasse er et sett med variabler og funksjoner som fungerer sammen, der variablene ikke har verdier tilordnet. Når verdier er tilordnet variablene, blir klassen et objekt. Ulike verdier gitt til samme klasse resulterer i forskjellige objekter; det vil si at forskjellige objekter er den samme klassen med forskjellige verdier. Å lage et objekt fra en klasse sies å instantisere objektet.

Navnet, uordnede_map, er en klasse. Et objekt opprettet fra den uordnede_map -klassen har et programmerer valgt navn.

En funksjon som tilhører en klasse er nødvendig for å instantisere et objekt fra klassen. I C ++ har den funksjonen samme navn som navnet på klassen. Objekter opprettet (instantiert) fra klassen har forskjellige navn gitt dem, av programmereren.

Å lage et objekt fra klassen betyr å konstruere objektet; Det betyr også å instruentere.

Et C ++ -program som bruker den uordnede_map -klassen, starter med følgende linjer øverst i filen:

#inkludere
#inkludere
ved hjelp av navneområdet STD;

Den første linjen er for inngang/utgang. Den andre linjen er å la programmet bruke alle funksjonene i den uordnede_map -klassen. Den tredje linjen lar programmet bruke navnene i standard navneområdet.

Overbelastning av en funksjon

Når to eller flere forskjellige funksjonssignaturer har samme navn, sies det navnet å være overbelastet. Når en funksjon kalles, må du utføre antall og type argumenter som faktisk utføres.

Konstruksjon/kopiering konstruksjon

Enkel konstruksjon

Et uordnet kart kan konstrueres og tildelte verdier som følger:

uordnede_map umap;
umap ["banan"] = "gul";
umap ["drue"] = "grønn";
umap ["fig"] = "lilla";

Erklæringen begynner med malspesialiseringen med typene for nøkkelen og verdiparene. Dette blir fulgt av programmererens valgte navn på kartet; deretter en semikolon. Det andre kodesegmentet viser hvordan du tildeler verdier til nøklene sine.
Konstruksjon av initializer_list
Dette kan gjøres som følger:

uordnede_map UMAP ("Banana", "Yellow",
"drue", "grønn", "fig", "lilla");

Konstruksjon ved å tildele initializer_list
Eksempel:

uordnede_map umap = "banan", "gul",
"Grape", "Green", "Fig", "Purple";

Konstruksjon ved å kopiere en annen uordnede_map
Eksempel:

uordnede_map UMAP1 ("Banana", "Yellow",
"drue", "grønn", "fig", "lilla");
uordnede_map UMAP2 (UMAP1);

Parelementet

Følgende kode viser hvordan du oppretter og får tilgang til parelementet:

par pr = 'd', "hav";
cout << pr.first << '\n';
cout << pr.second << '\n';

Utgangen er:

d
hav

Først og sekund er reserverte ord for de to varene i paret. Verdiene i paret kan fortsatt endres ved hjelp av første og andre.

Et par kalles, verdi_type i temaet for det uordnede kartet.

uordnede_map element tilgang

Mapped_type & Operator [] (Key_Type && k)
Returnerer verdien for den tilsvarende tasten. Eksempel:

uordnede_map umap;
umap ["banan"] = "gul";
umap ["drue"] = "grønn";
umap ["fig"] = "lilla";
const char *ret = umap ["drue"];
cout << ret <<'\n';

Utgangen er: “Grønn”. Verdier kan tilordnes på samme måte - se ovenfor.

uordnede_map kapasitet

størrelse_type størrelse () const noExcept
Returnerer antall par på kartet.

uordnede_map umap;
umap ["banan"] = "gul";
umap ["drue"] = "grønn";
umap ["fig"] = "lilla";
cout << umap.size() <<'\n';

Utgangen er 3.

bool tom () const no except

Returnerer 1 for sann hvis kartet ikke har noe par, og 0 for usant hvis det har par. Eksempel:

uordnede_map umap;
cout << umap.empty() <<'\n';

Utgangen er 1.

Returnerer iteratorer og uordnede kartklassen

En iterator er som en peker, men har mer funksjonalitet enn pekeren.

Begynn () NOEXCEPT

Returnerer en iterator som peker på det første paret av kartobjektet, som i følgende kodesegment:

uordnede_map umap;
umap ["banan"] = "gul"; umap ["drue"] = "grønn"; umap ["fig"] = "lilla";
uordnede_map:: iterator iter = umap.begynne();
par pr = *iter;
cout << pr.first << ", " << pr.second << '\n';

Utgangen er: fig, lilla. Kartet er ikke bestilt.

Begynn () const noExcept;

Returnerer en iterator som peker på det første elementet i kartobjektsamlingen. Når objektkonstruksjonen er innledet av Const, blir uttrykket “begynn () const” utført i stedet for “Begin ()”. Under denne tilstanden kan ikke elementene i objektet endres. Den brukes i følgende kode, for eksempel.

const unordered_map UMAP ("Banana", "Yellow",
"drue", "grønn", "fig", "lilla");
uordnede_map:: const_iterator iter = umap.begynne();
par pr = *iter;
cout << pr.first << ", " << pr.second << '\n';

Utgangen er: fig, lilla. Kartet er ikke bestilt. Merk at Const_iterator har blitt brukt denne gangen, i stedet for bare iterator, for å motta den returnerte iteratoren.

slutt () NOEXCEPT

Returnerer en iterator som peker rett utover det siste elementet i kartobjektet.

slutt () const nowexcept

Returnerer en iterator som peker rett utover det siste elementet i kartobjektet. Når kartobjektkonstruksjonen er innledet av Const, blir uttrykket “end () const” utført i stedet for “ende ()”.

uordnede_map -operasjoner

iterator finn (const key_type & k)

Søker etter et par av den gitte tasten på kartet. Hvis det blir funnet, returnerer den iteratoren. Hvis ikke funnet, returnerer den en iterator som peker på slutten av kartet, som ikke er et par. Følgende kode viser hvordan du bruker denne medlemsfunksjonen:

uordnede_map umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
uordnede_map:: iterator iter = umap.finn ('c');
hvis (umap.finn ('C') != umap.slutt())
par pr = *iter;
cout << pr.first << ", " << pr.second << '\n';

Utgangen er: C, D

const_iterator find (const key_type & k) const;

Denne versjonen av funksjonen kalles, hvis opprettelsen av det uordnede kartet begynner med Const, noe som gjør alle elementene på kartet skrivebeskyttet.

uordnede_map -modifikatorer

Parinnsats (Value_Type && obj)
Et uordnet kart betyr at parene ikke er i noen rekkefølge. Så programmet setter inn paret hvor som helst det finner praktisk. Funksjonen kommer tilbake, par. Hvis innsatsen var vellykket, vil bool være 1 for sann, ellers ville den være 0 for falsk. Hvis innsatsen er vellykket, vil iteratoren peke på det nylig innsatte elementet. Følgende kode illustrerer bruken:

uordnede_map umap;
umap ["banan"] = "gul";
umap ["drue"] = "grønn";
umap ["fig"] = "lilla";
umap.Sett inn ("Cherry", "Red", "Strawberry", "Red");
cout << umap.size() << '\n';

Utgangen er: 5. Mer enn ett par kan settes inn.

størrelse_type sletting (const key_type & k)

Denne funksjonen sletter et par fra den uordnede_map. Følgende kodesegment illustrerer:

uordnede_map umap;
umap ["banan"] = "gul";
umap ["drue"] = "grønn";
umap ["fig"] = "lilla";
int num = umap.slette ("drue");
cout << umap.size() << '\n';

Utgangen er 2.
void Swap (uordnede_map &)
To uordnede kart kan byttes, som illustrert i dette kodesegmentet:

uordnede_map umap1 = "banan", "gul",
"Grape", "Green", "Fig", "Purple", "Strawberry", "Red";
uordnede_map UMAP2 = "Cherry", "Red", "Lime", "Green";
UMAP1.SWAP (UMAP2);
uordnede_map:: iterator iter1 = umap1.begynne();
par pr1 = *iter1;
uordnede_map:: iterator iter2 = umap2.begynne();
par 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';
uordnede_map umap1 = "banan", "gul",
"Grape", "Green", "Fig", "Purple", "Strawberry", "Red";
uordnede_map UMAP2 = "Cherry", "Red", "Lime", "Green";
UMAP1.SWAP (UMAP2);
uordnede_map:: iterator iter1 = umap1.begynne();
par pr1 = *iter1;
uordnede_map:: iterator iter2 = umap2.begynne();
par 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';

Utgangen er:

Første nøkkel og størrelse på UMAP1: kalk, 2
Første nøkkel og størrelse på UMAP2 Strawberry, 4

Kartet er ikke bestilt. Merk at lengden på et kart økes om nødvendig. Datatypene må være de samme.

Klasse og dets instantierte objekter

En verdi er for en datatype, som et instantiert objekt er for en klasse. Den uordnede kartkonstruksjonen kan også godta en klasse som datatype. Følgende program illustrerer dette:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Klasse thecla
offentlig:
int num;
statisk char ch;
void func (char cha, const char *str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

statisk tomrom (char ch)
if (ch == 'a')
cout << "Official static member function" << '\n';

;
int main ()

Thecla obj1; Thecla obj2; Thecla obj3; Thecla obj4; Thecla obj5;
uordnede_map umap;
umap = "banan", obj1, "drue", obj2, "fig", obj3, "jordbær", obj4, "lime", obj5;
cout << umap.size() << '\n';
retur 0;

Utgangen er: 5.

Klassedefinisjonen har to data fra data og to offentlige medlemsfunksjoner. I hovedfunksjonen () blir forskjellige objekter for klassen instantiert. Et uordnet kart blir deretter instantiert, der hvert par består av navnet på en frukt og et objekt fra klassen. Størrelsen på kartet vises. Programmet kompilerer uten advarsel eller feilmelding.

Bruk av kartet

Arrayen knytter en indeks til verdi. Nøkkel/verdipar finnes i mange situasjoner i livet, som kan programmeres. Nøkkelen/verdiparet av frukt/farge er bare ett eksempel. Et annet eksempel er navnet på mennesker og deres aldre. I dette tilfellet vil paret være av en type, par. Det kan også være par. I sistnevnte tilfelle vil det forbehandle direktivet bli ansatt. Et nøkkel-/verdipar kan fremdeles være navnene på ektepar. I land der det er polygami, vil det være forskjellige koner for en mann.

Dannelse av et kart

Et kart er ikke en todimensjonal matrise, med to kolonner. Et kart fungerer med en hasjfunksjon. Nøkkelen er kodet av hasjfunksjonen, til et heltall av en matrise. Det er denne matrisen som holder verdiene. Så det er faktisk en matrise med verdiene, og tastene er kartlagt til indeksene i matrisen, og derfor blir korrespondansene mellom nøkler og verdier laget. Hashing er et omfattende tema og er ikke dekket i denne artikkelen.

Konklusjon

Et kart, også kjent som et assosiativt utvalg er en liste over elementer, der hvert element er et nøkkel-/verdipar. Så hver tast tilsvarer en verdi. I C ++ implementeres kartet som en datastruktur med medlemsfunksjoner og operatører. Et bestilt kart er et der elementparet er bestilt av nøkler. Et uordnet kart er et der det ikke er noen bestilling.

Teknisk består en hasj av parelementer. Faktisk er paret en hel datastruktur med sine medlemsfunksjoner og operatører. De to malparametrene for paret er de samme to malparametrene for Unordered_map.

Initializer_list for kartet er en rekke bokstaver av litteraler. Hver indre bokstavelig består av to objekter, nøkkelen/verdiparet.

Medlemsfunksjonene og operatørene for uordnede_map kan kategoriseres under følgende overskrifter: uordnede_map Konstruksjon/kopikonstruksjon, uordnede_map -kapasitet, uordnede_map iterator, uordnede_map -operasjoner og uordnede_map -modifiers.

Et uordnet kart brukes når en nøkkel må kartlegges til en verdi.