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_mapumap ["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:
"drue", "grønn", "fig", "lilla");
Konstruksjon ved å tilordne Initializer_list
Eksempel:
"drue", "grønn", "fig", "lilla";
Konstruksjon ved å kopiere en annen unordered_map
Eksempel:
"drue", "grønn", "fig", "lilla");
unordered_map
Paret Element
Følgende kode viser hvordan du oppretter og får tilgang til parelementet:
parcout << pr.first << '\n';
cout << pr.second << '\n';
Utgangen er:
dhav
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:
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.
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_mapcout << 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_mapumap ["banana"] = "gul"; umap ["drue"] = "grønn"; umap ["fig"] = "lilla";
unordered_map
par
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"drue", "grønn", "fig", "lilla");
unordered_map
par
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_mapumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map
hvis (umap.finn ('c') != umap.slutt())
par
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
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
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_mapumap ["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:
"drue", "grønn", "fig", "lilla", "jordbær", "rød";
unordered_map
umap1.bytte (umap2);
unordered_map
par
unordered_map
par
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
"drue", "grønn", "fig", "lilla", "jordbær", "rød";
unordered_map
umap1.bytte (umap2);
unordered_map
par
unordered_map
par
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 = "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
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
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