Slik bruker du C ++ Uordnet kart

How Use C Unordered Map



Et kart, også kjent som en assosiativ matrise, er en liste over elementer, der hvert element er et nøkkel/verdi -par. Så hver nøkkel 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 i fargene. I C ++ implementeres kartet som en datastruktur med medlemsfunksjoner og operatører. Et ordnet kart er et der elementparene har blitt ordnet med nøkler. Et uordnet kart er et der det ikke er ordre. Denne artikkelen forklarer hvordan du bruker C ++ uordnet kart, skrevet som uordnet_kart. Du trenger kunnskap i C ++ - tips for å forstå denne artikkelen. unordered_map er en del av standardbiblioteket C ++.

Klasse og objekter

En klasse er et sett med variabler og funksjoner som fungerer sammen, der variablene ikke har verdier som er 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 samme klasse med forskjellige verdier. Det sies å lage et objekt fra en klasse for å instantere objektet.







Navnet, unordered_map, er en klasse. Et objekt som er opprettet fra klassen unordered_map, har et valgt programmeringsnavn.



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 dem av programmereren.



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





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

#inkludere
#inkludere
ved hjelp av navneområde std;

Den første linjen er for input/output. Den andre linjen er å la programmet bruke alle funksjonene i klassen unordered_map. Den tredje linjen lar programmet bruke navnene i standardnavnområ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 antallet og typen argumenter hvilken funksjon som faktisk utføres.

Konstruksjon/kopiering

Enkel konstruksjon

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

uordnet_kart<konst røye*, konst røye*>umap;

umap['banan'] = 'gul';
umap['drue'] = 'grønn';
umap['Fig'] = 'lilla';

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

uordnet_kart<konst røye*, konst røye*>umap({{'banan', 'gul'},
{'drue', 'grønn'}, {'Fig', 'lilla'}});

Konstruksjon ved å tilordne Initializer_list
Eksempel:

uordnet_kart<konst røye*, konst røye*>umap= {{'banan', 'gul'},
{'drue', 'grønn'}, {'Fig', 'lilla'}};

Konstruksjon ved å kopiere et annet uordnet_kart
Eksempel:

uordnet_kart<konst røye*, konst røye*>umap1({{'banan', 'gul'},
{'drue', 'grønn'}, {'Fig', 'lilla'}});
uordnet_kart<konst røye*, konst røye*>umap2(umap1);

Paret Element

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

par<røye, konst røye*>pr= {'d', 'være'};
koste<<pr.først << ' n';
koste<<pr.sekund << ' n';

Utgangen er:

d
være

første og andre er reserverte ord for de to elementene i paret. Verdiene i paret kan fremdeles endres ved å bruke første og andre.

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

unordered_map Element Access

mapped_type & operator [] (key_type && k)
Returnerer verdien for den tilhørende nøkkelen. Eksempel:

uordnet_kart<konst røye*, konst røye*>umap;

umap['banan'] = 'gul';
umap['drue'] = 'grønn';
umap['Fig'] = 'lilla';

konst røye *Ikke sant=umap['drue'];

koste<<Ikke sant<<' 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.

uordnet_kart<konst røye*, konst røye*>umap;

umap['banan'] = 'gul';
umap['drue'] = 'grønn';
umap['Fig'] = 'lilla';

koste<<umap.størrelse() <<' n';

Utdata er 3.

bool tom () const noexcept

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

uordnet_kart<konst røye*, konst røye*>umap;
koste<<umap.tømme() <<' n';

Utdata er 1.

Returnerende Iteratorer og klassen Uordnet kart

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

begin () noe unntatt

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

uordnet_kart<konst røye*, konst røye*>umap;

umap['banan'] = 'gul';umap['drue'] = 'grønn';umap['Fig'] = 'lilla';

uordnet_kart<konst røye*, konst røye*> ::iteratoriter=umap.begynne();
par<konst røye*, konst røye*>pr= *iter;
koste<<pr.først << ',' <<pr.sekund << ' n';

Utgangen er: fig, lilla. Kartet er ubestilt.

begin () const noexcept;

Returnerer en iterator som peker til det første elementet i kartobjektsamlingen. Når objektkonstruksjonen går foran const, utføres uttrykket begin () const i stedet for begynner (). Under denne betingelsen kan ikke elementene i objektet endres. Den brukes for eksempel i følgende kode.

konstuordnet_kart<konst røye*, konst røye*>umap({{'banan', 'gul'},
{'drue', 'grønn'}, {'Fig', 'lilla'}});

uordnet_kart<konst røye*, konst røye*> ::const_iteratoriter=umap.begynne();
par<konst røye*, konst røye*>pr= *iter;
koste<<pr.først << ',' <<pr.sekund << ' n';

Utgangen er: fig, lilla. Kartet er ubestilt. Vær oppmerksom på at const_iterator har blitt brukt denne gangen, i stedet for bare iterator, for å motta den returnerte iteratoren.

slutten () noe unntatt

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

ende () const noexcept

Returnerer en iterator som peker umiddelbart utover det siste elementet i kartobjektet. Når kartobjektkonstruksjonen går foran const, utføres uttrykket end () const i stedet for end ().

uordnet_kartoperasjoner

iterator find (const key_type & k)

Søker etter et par av den angitte 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:

uordnet_kart<røye,røye>umap;

umap['til'] = 'b';umap['c'] = 'd';umap['Og'] = 'f';

uordnet_kart<røye,røye> ::iteratoriter=umap.finne('c');
hvis (umap.finne('c') ! =umap.slutt())
{
par<røye,røye>pr= *iter;
koste<<pr.først << ',' <<pr.sekund << ' n';
}

Utgangen er: c, d

const_iterator finn (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 i kartet skrivebeskyttet.

unordered_map Modifiers

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

uordnet_kart<konst røye*, konst røye*>umap;

umap['banan'] = 'gul';
umap['drue'] = 'grønn';
umap['Fig'] = 'lilla';

umap.sett inn({{'kirsebær', 'nett'}, {'jordbær', 'nett'}});

koste<<umap.størrelse() << ' n';

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

størrelse_type slette (const key_type & k)

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

uordnet_kart<konst røye*, konst røye*>umap;

umap['banan'] = 'gul';
umap['drue'] = 'grønn';
umap['Fig'] = 'lilla';

intpå en=umap.viske ut('drue');

koste<<umap.størrelse() << ' n';

Utgangen er 2.
ugyldig bytte (uordnet_kart og)
To uordnede kart kan byttes, som vist i dette kodesegmentet:

uordnet_kart<konst røye*, konst røye*>umap1= {{'banan', 'gul'},
{'drue', 'grønn'}, {'Fig', 'lilla'}, {'jordbær', 'nett'}};

uordnet_kart<konst røye*, konst røye*>umap2= {{'kirsebær', 'nett'}, {'lime', 'grønn'}};

umap1.bytte(umap2);

uordnet_kart<konst røye*, konst røye*> ::iteratoriter1=umap1.begynne();
par<konst røye*, konst røye*>pr1= *iter1;
uordnet_kart<konst røye*, konst røye*> ::iteratoriter2=umap2.begynne();
par<konst røye*, konst røye*>pr2= *iter2;

koste<< 'Første nøkkel og størrelse på umap1:'<<pr1.først <<','<<umap1.størrelse() << ' n';
koste<< 'Første nøkkel og størrelse på umap2'<<pr2.først <<','<<umap2.størrelse() << ' n';
uordnet_kart<konst røye*, konst røye*>umap1= {{'banan', 'gul'},
{'drue', 'grønn'}, {'Fig', 'lilla'}, {'jordbær', 'nett'}};
uordnet_kart<konst røye*, konst røye*>umap2= {{'kirsebær', 'nett'}, {'lime', 'grønn'}};

umap1.bytte(umap2);

uordnet_kart<konst røye*, konst røye*> ::iteratoriter1=umap1.begynne();
par<konst røye*, konst røye*>pr1= *iter1;
uordnet_kart<konst røye*, konst røye*> ::iteratoriter2=umap2.begynne();
par<konst røye*, konst røye*>pr2= *iter2;

koste<< 'Første nøkkel og størrelse på umap1:'<<pr1.først <<','<<umap1.størrelse() << ' n';
koste<< 'Første nøkkel og størrelse på umap2'<<pr2.først <<','<<umap2.størrelse() << ' n';

Utgangen er:

Første nøkkel og størrelse på umap1: lime, 2

Første nøkkel og størrelse på umap2 jordbær, 4

Kartet er ubestilt. Vær oppmerksom på at lengden på et kart økes om nødvendig. Datatypene må være de samme.

Klassen og dens Instantiated Objects

En verdi er til en datatype, slik 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åde std;

klasse TheCla
{
offentlig:
intpå en;
statisk røyekap;

tomromfunksjon(røyeNei, konst røye *s)
{
koste<< 'Det er ' <<på en<< 'bøker verdt' <<Nei<<s<< ' i butikken.' << ' n';
}
statisk tomrommoro(røyekap)
{
hvis (kap== 'til')
koste<< 'Offisiell statisk medlemsfunksjon' << ' n';
}
};

inthoved-()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;

uordnet_kart<konst røye*,TheCla>umap;
umap= {{'banan',obj1}, {'drue',obj2}, {'Fig',obj3}, {'jordbær',obj4}, {'lime',obj5}};

koste<<umap.størrelse() << ' n';

komme tilbake 0;
}

Utgangen er: 5.

Klasse definisjonen har to data offentlige medlemmer og to offentlige medlemsfunksjoner. I hovedfunksjonen () blir forskjellige objekter for klassen instantiert. Et uordnet kart blir deretter instantiert, hvor hvert par består av navnet på en frukt og et objekt fra klassen. Kartets størrelse vises. Programmet kompileres uten advarsel eller feilmelding.

Søknad av kartet

Matrisen knytter en indeks til verdi. Nøkkel/verdi par finnes i mange situasjoner i livet, som kan programmeres. Nøkkel/verdi -paret 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 direktivet om forbehandling bli benyttet. Et nøkkel/verdi -par kan fortsatt 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 hashfunksjon. Nøkkelen er kodet av hashfunksjonen, til et heltall i en matrise. Det er denne matrisen som holder verdiene. Så det er faktisk en matrise med verdiene, og nøkler blir tilordnet til matrisens indekser, og korrespondansen mellom nøkler og verdier utføres. 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/verdi -par. Så hver nøkkel tilsvarer en verdi. I C ++ implementeres kartet som en datastruktur med medlemsfunksjoner og operatører. Et ordnet kart er et der elementparene har blitt ordnet med nøkler. Et uordnet kart er et der det ikke er bestilt.

Teknisk består en hash 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 det uordnede_kartet.

Initializer_list for kartet er en matrise bokstavelig talt med bokstaver. Hver intern bokstav består av to objekter, nøkkel/verdi -paret.

Medlemsfunksjonene og operatørene for uordnet_kart kan kategoriseres under følgende overskrifter: uordnet_kartkonstruksjon/kopieringskonstruksjon, uordnet_kartkapasitet, uordnet_kart iterator, uordnet_kartoperasjoner og uordnet_kartmodifikatorer.

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

Chrys