Klasse og objekter
En klasse er et sæt variabler og funktioner, der fungerer sammen, hvor variablerne ikke har værdier tildelt. Når værdier tildeles variablerne, bliver klassen et objekt. Forskellige værdier givet til samme klasse resulterer i forskellige objekter; det vil sige, at forskellige objekter er den samme klasse med forskellige værdier. Oprettelse af et objekt fra en klasse siges at instantere objektet.
Navnet unordered_map er en klasse. Et objekt oprettet fra klassen unordered_map har et programmørvalgt navn.
En funktion, der hører til en klasse, er nødvendig for at instantiere et objekt fra klassen. I C ++ har denne funktion det samme navn som navnet på klassen. Objekter oprettet (instantieret) fra klassen har forskellige navne givet af programmøren.
At skabe et objekt fra klassen betyder at konstruere objektet; det betyder også instantiating.
Et C ++ - program, der bruger klassen unordered_map, starter med følgende linjer øverst i filen:
#omfatte#omfatte
ved hjælp af namespace std;
Den første linje er til input / output. Den anden linje er at give programmet mulighed for at bruge alle funktionerne i klassen unordered_map. Den tredje linje giver programmet mulighed for at bruge navnene i standardnavneområdet.
Overbelastning af en funktion
Når to eller flere forskellige funktionssignaturer har samme navn, siges dette navn at være overbelastet. Når en funktion kaldes, bestemmer antallet og typen af argumenter, hvilken funktion der faktisk udføres.
Konstruktion / kopi konstruktion
Enkel konstruktion
Et uordnet kort kan konstrueres og tildeles værdier som følger:
unordered_mapumap ["banan"] = "gul";
umap ["drue"] = "grøn";
umap ["fig"] = "lilla";
Erklæringen begynder med skabelonspecialisering med typerne for nøgle- og værdiparene. Dette efterfølges af programmørens valgte navn til kortet; derefter et semikolon. Det andet kodesegment viser, hvordan man tildeler værdier til deres nøgler.
Konstruktion af Initializer_list
Dette kan gøres som følger:
"drue", "grøn", "fig", "lilla");
Konstruktion ved at tildele Initializer_list
Eksempel:
"drue", "grøn", "fig", "lilla";
Konstruktion ved at kopiere en anden unordered_map
Eksempel:
"drue", "grøn", "fig", "lilla");
unordered_map
Parret Element
Følgende kode viser, hvordan du opretter og får adgang til parelementet:
parcout << pr.first << '\n';
cout << pr.second << '\n';
Outputtet er:
dhav
første og andet er reserverede ord til de to ting i parret. Værdierne i parret kan stadig ændres ved hjælp af første og andet.
Et par kaldes værdi_type i emnet på det ikke-ordnede kort.
unordered_map Elementadgang
mapped_type & operator [] (key_type && k)
Returnerer værdien for den tilsvarende tast. Eksempel:
umap ["banan"] = "gul";
umap ["drue"] = "grøn";
umap ["fig"] = "lilla";
const char * ret = umap ["drue"];
cout << ret <<'\n';
Outputtet er: “grøn”. Værdier kan tildeles på samme måde - se ovenfor.
unordered_map Kapacitet
størrelse_type størrelse () const noexcept
Returnerer antallet af par på kortet.
umap ["banan"] = "gul";
umap ["drue"] = "grøn";
umap ["fig"] = "lilla";
cout << umap.size() <<'\n';
Output er 3.
bool tom () const noexcept
Returnerer 1 for sand, hvis kortet ikke har noget par, og 0 for falsk, hvis det har par. Eksempel:
unordered_mapcout << umap.empty() <<'\n';
Output er 1.
Tilbagevendende itteratorer og den uordnede kortklasse
En iterator er som en markør, men har mere funktionalitet end markøren.
start () noexcept
Returnerer en iterator, der peger på det første par af kortobjektet, som i følgende kodesegment:
unordered_mapumap ["banan"] = "gul"; umap ["drue"] = "grøn"; umap ["fig"] = "lilla";
unordered_map
par
cout << pr.first << ", " << pr.second << '\n';
Outputtet er: fig, lilla. Kortet er ikke ordnet.
start () const noexcept;
Returnerer en iterator, der peger på det første element i kortobjektindsamlingen. Når objektkonstruktionen er forud for const, udføres udtrykket "start () const" i stedet for "start ()". Under denne betingelse kan elementerne i objektet ikke ændres. Det bruges f.eks. I følgende kode.
const unordered_map"drue", "grøn", "fig", "lilla");
unordered_map
par
cout << pr.first << ", " << pr.second << '\n';
Outputtet er: fig, lilla. Kortet er ikke ordnet. Bemærk, at const_iterator er blevet brugt denne gang i stedet for kun iterator til at modtage den returnerede iterator.
slut () noexcept
Returnerer en iterator, der peger umiddelbart ud over det sidste element i kortobjektet.
end () const noexcept
Returnerer en iterator, der peger umiddelbart ud over det sidste element i kortobjektet. Når kortobjektkonstruktionen er forud for const, udføres udtrykket "end () const" i stedet for "end ()".
unordered_map-operationer
iterator find (const key_type & k)
Søger efter et par af den givne nøgle på kortet. Hvis den findes, returnerer den iteratoren. Hvis den ikke findes, returnerer den en iterator, der peger på slutningen af kortet, som ikke er et par. Følgende kode viser, hvordan du bruger denne medlemsfunktion:
unordered_mapumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map
hvis (umap.find ('c') != umap.ende())
par
cout << pr.first << ", " << pr.second << '\n';
Outputtet er: c, d
const_iterator find (const key_type & k) const;
Denne version af funktionen kaldes, hvis oprettelsen af det ikke-ordnede kort begynder med const, hvilket gør alle elementerne på kortet skrivebeskyttet.
unordered_map Modifiers
par
Et uordnet kort betyder, at parene ikke er i nogen rækkefølge. Så programmet indsætter parret på ethvert sted, det finder praktisk. Funktionen vender tilbage, par
umap ["banan"] = "gul";
umap ["drue"] = "grøn";
umap ["fig"] = "lilla";
umap.indsæt ("kirsebær", "rød", "jordbær", "rød");
cout << umap.size() << '\n';
Outputtet er: 5. Mere end et par kan indsættes.
størrelse_type sletning (const key_type & k)
Denne funktion sletter et par fra unordered_map. Følgende kodesegment illustrerer:
unordered_mapumap ["banan"] = "gul";
umap ["drue"] = "grøn";
umap ["fig"] = "lilla";
int num = umap.sletning ("drue");
cout << umap.size() << '\n';
Output er 2.
ugyldig swap (unordered_map &)
To uordnede kort kan byttes som illustreret i dette kodesegment:
"drue", "grøn", "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øn", "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';
Outputtet er:
Første nøgle og størrelse på umap1: kalk, 2
Første nøgle og størrelse på umap2 jordbær, 4
Kortet er ikke ordnet. Bemærk, at længden af et kort øges, hvis det er nødvendigt. Datatyperne skal være de samme.
Klassen og dens øjeblikkelige genstande
En værdi er til en datatype, som et instantieret objekt er for en klasse. Den uordnede kortkonstruktion kan også acceptere en klasse som datatype. Følgende program illustrerer dette:
#omfatte#omfatte
ved hjælp af namespace std;
klasse TheCla
offentlig:
int num;
statisk char ch;
ugyldig funk (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
statisk tomrums sjov (char ch)
hvis (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla mod1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map
umap = "banan", obj1, "drue", obj2, "fig", obj3, "jordbær", obj4, "lime", obj5;
cout << umap.size() << '\n';
returnere 0;
Outputtet er: 5.
Klassedefinitionen har to data offentlige medlemmer og to offentlige medlems funktioner. I hovedfunktionen () instantieres forskellige objekter til klassen. Derefter instantieres et ikke-ordnet kort, hvor hvert par består af navnet på en frugt og et objekt fra klassen. Kortets størrelse vises. Programmet kompileres uden advarsel eller fejlmeddelelse.
Anvendelse af kortet
Arrayet knytter et indeks til værdien. Nøgle / værdipar findes i mange situationer i livet, som kan programmeres. Nøgle / værdi par af frugt / farve er blot et eksempel. Et andet eksempel er navnet på mennesker og deres alder. I dette tilfælde vil parret være af en type, par
Dannelse af et kort
Et kort er ikke et todimensionelt array med to kolonner. Et kort fungerer med en hash-funktion. Nøglen er kodet af hash-funktionen til et heltal i en matrix. Det er denne matrix, der indeholder værdierne. Så der er faktisk et array med værdierne, og nøglerne kortlægges til arrayets indekser, og korrespondancerne mellem nøgler og værdier foretages. Hashing er et omfattende emne og er ikke dækket af denne artikel.
Konklusion
Et kort, også kendt som et associerende array, er en liste over elementer, hvor hvert element er et nøgle / værdipar. Så hver nøgle svarer til en værdi. I C ++ implementeres kortet som en datastruktur med medlemsfunktioner og operatører. Et ordnet kort er et, hvor elementparrene er ordnet efter nøgler. Et uordnet kort er et, hvor der ikke er nogen ordre.
Teknisk set består en hash af par
Initialiseringslisten for kortet er en matrix bogstavelig med bogstaver. Hver indre bogstavelig består af to objekter, nøgle / værdipar.
Medlemsfunktionerne og operatorerne til unordered_map kan kategoriseres under følgende overskrifter: unordered_map-konstruktion / kopi-konstruktion, unordered_map Capacity, unordered_map iterator, unordered_map Operations og unordered_map Modifiers.
Et uordnet kort bruges, når en nøgle skal kortlægges til en værdi.
Chrys