C ++

Hvordan bruke C ++ Uordnet kart

Hvordan bruke C ++ Uordnet kart
Et kart, også kjent som en assosiativ matrise, 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 tastene være en liste over frukt og de tilsvarende verdiene, fruktene på fruktene. I C ++ er kartet implementert som en datastruktur med medlemsfunksjoner og operatører. Et ordnet kart er et der elementparene er ordnet etter nøkler. Et uordnet kart er et der det ikke er noen ordre. Denne artikkelen forklarer hvordan du bruker C ++ uordnet kart, skrevet som unordered_map. Du trenger kunnskap i C ++ pekere for å forstå denne artikkelen. unordered_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 tildelt. Når verdier tildeles 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 å instantere objektet.

Navnet, unordered_map, er en klasse. Et objekt opprettet fra klassen unordered_map har et programmør valgt navn.

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

Å lage et objekt fra klassen betyr å konstruere objektet; det betyr også å instantiere.

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

#inkludere
#inkludere
bruker navneområde std;

Den første linjen er for inngang / utgang. Den andre linjen er å la programmet bruke alle funksjonene i klassen unordered_map. 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 at navnet er overbelastet. Når en funksjon kalles, bestemmer antall og type argumenter hvilken funksjon som faktisk utføres.

Konstruksjon / kopi konstruksjon

Enkel konstruksjon

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

unordered_map umap;
umap ["banana"] = "gul";
umap ["drue"] = "grønn";
umap ["fig"] = "lilla";

Erklæringen begynner med malspesialiseringen med typene for nøkkel- og verdiparene. Dette blir fulgt av programmererens valgte navn for kartet; deretter et semikolon. Det andre kodesegmentet viser hvordan du tilordner verdier til tastene.
Konstruksjon av Initializer_list
Dette kan gjøres som følger:

unordered_map umap ("banan", "gul",
"drue", "grønn", "fig", "lilla");

Konstruksjon ved å tilordne Initializer_list
Eksempel:

unordered_map umap = "banan", "gul",
"drue", "grønn", "fig", "lilla";

Konstruksjon ved å kopiere en annen unordered_map
Eksempel:

unordered_map umap1 ("banan", "gul",
"drue", "grønn", "fig", "lilla");
unordered_map umap2 (umap1);

Paret Element

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

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

Utgangen er:

d
hav

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

Et par kalles, value_type i emnet på det uordnede kartet.

unordered_map Element Access

mapped_type & operator [] (key_type && k)
Returnerer verdien for den tilsvarende tasten. Eksempel:

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

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

unordered_map Kapasitet

size_type size () const noexcept
Returnerer antall par på kartet.

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

Output er 3.

bool tom () const noexcept

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

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

Output er 1.

Returnerende Iteratorer og uordnet kartklasse

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:

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

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

begin () const noexcept;

Returnerer en iterator som peker på det første elementet i kartobjektsamlingen. Når objektkonstruksjonen er foran med const, blir uttrykket "start () const" utført i stedet for "start ()". Under denne betingelsen kan ikke elementene i objektet endres. Den brukes for eksempel i følgende kode.

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

Produksjonen 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.

end () const noexcept

Returnerer en iterator som peker rett utenfor det siste elementet i kartobjektet. Når kartobjektkonstruksjonen går foran const, blir uttrykket "end () const" utført i stedet for "end ()".

unordered_map Operasjoner

iterator finne (const key_type & k)

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

unordered_map umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_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 finne (const key_type & k) const;

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

unordered_map Modifiers

par sett inn (value_type && obj)
Et uordnet kart betyr at parene ikke er i noen rekkefølge. Så programmet setter inn paret hvor som helst det passer. Funksjonen returnerer, par. Hvis innsettingen var vellykket, vil bool være 1 for sant, ellers ville det være 0 for usant. Hvis innsettingen er vellykket, vil iteratoren peke på det nylig innsatte elementet. Følgende kode illustrerer bruken:

unordered_map umap;
umap ["banana"] = "gul";
umap ["drue"] = "grønn";
umap ["fig"] = "lilla";
umap.sett inn ("kirsebær", "rød", "jordbær", "rød");
cout << umap.size() << '\n';

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

størrelse_type slett (const key_type & k)

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

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

Output er 2.
ugyldig bytte (unordered_map &)
To uordnede kart kan byttes, som illustrert i dette kodesegmentet:

unordered_map umap1 = "banan", "gul",
"drue", "grønn", "fig", "lilla", "jordbær", "rød";
unordered_map umap2 = "kirsebær", "rød", "lime", "grønn";
umap1.bytte (umap2);
unordered_map:: iterator iter1 = umap1.begynne();
par pr1 = * iter1;
unordered_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';
unordered_map umap1 = "banan", "gul",
"drue", "grønn", "fig", "lilla", "jordbær", "rød";
unordered_map umap2 = "kirsebær", "rød", "lime", "grønn";
umap1.bytte (umap2);
unordered_map:: iterator iter1 = umap1.begynne();
par pr1 = * iter1;
unordered_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 jordbær, 4

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

Klasse og dets øyeblikkelige gjenstander

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

#inkludere
#inkludere
bruker navneområde std;
klasse TheCla

offentlig:
int num;
statisk forkullning;
void func (char cha, const char * str)

cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

statisk tomrom moro (char ch)

hvis (ch == 'a')
cout << "Official static member function" << '\n';

;
int main ()

TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map umap;
umap = "banana", obj1, "grape", obj2, "fig", obj3, "strawberry", obj4, "lime", obj5;
cout << umap.size() << '\n';
retur 0;

Utgangen er: 5.

Klassedefinisjonen har to data offentlige medlemmer og to offentlige medlems funksjoner. 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. Kartets størrelse vises. Programmet kompilerer uten advarsel eller feilmelding.

Anvendelse av kartet

Matrisen knytter en indeks til verdien. Nøkkel / verdipar eksisterer i mange situasjoner i livet, som kan programmeres. Nøkkelen / verdien par frukt / farge er bare ett eksempel. Et annet eksempel er navnet på mennesker og deres alder. I dette tilfellet vil paret være av en type, par. Det kan også være par. I sistnevnte tilfelle vil forbehandlingsdirektivet bli benyttet. 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 et todimensjonalt utvalg, med to kolonner. Et kart fungerer med en hash-funksjon. Nøkkelen er kodet av hash-funksjonen, til et helt tall i en matrise. Det er denne matrisen som holder verdiene. Så det er faktisk en matrise med verdiene, og nøklene blir kartlagt til matrisenes indekser, og korrespondansen mellom nøkler og verdier blir laget. Hashing er et omfattende tema og dekkes ikke av denne artikkelen.

Konklusjon

Et kart, også kjent som en assosiativ matrise, er en liste over elementer der hvert element er et nøkkel / verdipar. Så hver tast tilsvarer en verdi. I C ++ er kartet implementert som en datastruktur med medlemsfunksjoner og operatører. Et ordnet kart er et der elementparene er ordnet etter nøkler. Et uordnet kart er et der det ikke er noen bestilling.

Teknisk sett består en hasj av par elementer. Faktisk er paret en hel datastruktur med medlemsfunksjoner og operatører. De to malparametrene for paret er de samme to malparametrene for unordered_map.

Initialiseringslisten for kartet er en rekke bokstavelige bokstaver. Hver indre bokstavelig består av to objekter, nøkkel / verdipar.

Medlemsfunksjonene og operatørene for unordered_map kan kategoriseres under følgende overskrifter: unordered_map construction / copy constructing, unordered_map Capacity, unordered_map iterator, unordered_map Operations, and unordered_map Modifiers.

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

Chrys

Mus Midterste museknapp fungerer ikke i Windows 10
Midterste museknapp fungerer ikke i Windows 10
De midtre museknapp hjelper deg med å bla gjennom lange websider og skjermer med mye data. Hvis det stopper, vil du ende opp med å bruke tastaturet ti...
Mus Hvordan endre venstre og høyre museknapp på Windows 10 PC
Hvordan endre venstre og høyre museknapp på Windows 10 PC
Det er ganske vanlig at alle datamusenheter er ergonomisk designet for høyrehendte brukere. Men det er tilgjengelige musenheter som er spesielt design...
Mus Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Bruk av mus eller tastatur i feil stilling for overdreven bruk kan føre til mange helseproblemer, inkludert belastning, karpaltunnelsyndrom og mer. I ...