Kako uporabljati neurejen zemljevid C ++

How Use C Unordered Map



Zemljevid, znan tudi kot asociativna matrika, je seznam elementov, kjer je vsak element par ključ/vrednost. Torej, vsak ključ ustreza vrednosti. Za običajno delo imajo lahko različni ključi enako vrednost. Na primer, ključi so lahko seznam sadja in ustrezne vrednosti, barve sadja. V C ++ je zemljevid izveden kot podatkovna struktura s funkcijami člani in operaterji. Urejen zemljevid je tisti, pri katerem so pari elementov razvrščeni po ključih. Neurejen zemljevid je tisti, kjer ni reda. Ta članek pojasnjuje, kako uporabljati neurejen zemljevid C ++, napisan kot unordered_map. Za razumevanje tega članka potrebujete znanje o kazalcih C ++. unordered_map je del standardne knjižnice C ++.

Razred in predmeti

Razred je niz spremenljivk in funkcij, ki delujejo skupaj, pri čemer spremenljivkam nimajo dodeljenih vrednosti. Ko so spremenljivkam dodeljene vrednosti, postane razred objekt. Različne vrednosti, podane istemu razredu, povzročijo različne predmete; to pomeni, da so različni predmeti isti razred z različnimi vrednostmi. Ustvarjanje predmeta iz razreda naj bi pomenilo nastanek predmeta.







Ime, unordered_map, je razred. Objekt, ustvarjen iz razreda unordered_map, ima ime programerja.



Funkcija, ki pripada razredu, je potrebna za ustvarjanje predmeta iz razreda. V C ++ ima ta funkcija isto ime kot ime razreda. Objekti, ki jih je ustvaril (ustvaril primerek) iz razreda, imajo programerja različna imena.



Ustvarjanje predmeta iz razreda pomeni izdelavo predmeta; pomeni tudi instanciranje.





Program C ++, ki uporablja razred unordered_map, se začne z naslednjimi vrsticami na vrhu datoteke:

#vključi
#vključi
z uporabo imenskega prostora std;

Prva vrstica je za vnos/izhod. Druga vrstica mora programu omogočiti uporabo vseh funkcij razreda unordered_map. Tretja vrstica omogoča programu uporabo imen v standardnem imenskem prostoru.



Preobremenitev funkcije

Kadar imata dva ali več različnih podpisov funkcij isto ime, je to ime preobremenjeno. Ko se pokliče ena funkcija, število in vrsta argumentov določata, katera funkcija je dejansko izvedena.

Gradnja/Kopiraj Gradnja

Enostavna konstrukcija

Neurejen zemljevid je mogoče sestaviti in mu dodeliti vrednosti na naslednji način:

unordered_map<const char*, const char*>umap;

umap['banana'] = 'rumena';
umap['grozdje'] = 'zelena';
umap['figa'] = 'vijolična';

Izjava se začne s specializacijo predloge z vrstami za pare ključ in vrednost. Sledi izbrano ime programerja za zemljevid; nato podpičje. Drugi segment kode prikazuje, kako dodeliti vrednosti njihovim ključem.
Konstrukcija po Initializer_list
To je mogoče storiti na naslednji način:

unordered_map<const char*, const char*>umap({{'banana', 'rumena'},
{'grozdje', 'zelena'}, {'figa', 'vijolična'}});

Konstrukcija z dodelitvijo Initializer_list
Primer:

unordered_map<const char*, const char*>umap= {{'banana', 'rumena'},
{'grozdje', 'zelena'}, {'figa', 'vijolična'}};

Konstrukcija s kopiranjem drugega unordered_map
Primer:

unordered_map<const char*, const char*>umap1({{'banana', 'rumena'},
{'grozdje', 'zelena'}, {'figa', 'vijolična'}});
unordered_map<const char*, const char*>umap2(umap1);

Par Element

Naslednja koda prikazuje, kako ustvariti in dostopati do elementa par:

par<char, const char*>pr= {'d', 'biti'};
stroški<<pr.prvi << ' n';
stroški<<pr.drugič << ' n';

Izhod je:

d
biti

prvi in ​​drugi sta rezervirani besedi za dva elementa v paru. Vrednosti v paru se lahko še vedno spreminjata s pomočjo prve in druge.

V temi o neurejenem zemljevidu se imenuje par value_type.

unordered_map Dostop do elementa

mapped_type & operator [] (key_type && k)
Vrne vrednost za ustrezen ključ. Primer:

unordered_map<const char*, const char*>umap;

umap['banana'] = 'rumena';
umap['grozdje'] = 'zelena';
umap['figa'] = 'vijolična';

const char *prav=umap['grozdje'];

stroški<<prav<<' n';

Izhod je: zelen. Vrednosti lahko dodelite na enak način - glejte zgoraj.

unordered_map Kapaciteta

size_type size () const noexcept
Vrne število parov na zemljevidu.

unordered_map<const char*, const char*>umap;

umap['banana'] = 'rumena';
umap['grozdje'] = 'zelena';
umap['figa'] = 'vijolična';

stroški<<umap.velikost() <<' n';

Izhod je 3.

bool empty () const noexcept

Vrne 1 za true, če zemljevid nima para, in 0 za false, če ima pare. Primer:

unordered_map<const char*, const char*>umap;
stroški<<umap.prazno() <<' n';

Izhod je 1.

Vračajoči se Iteratorji in razred neurejenih zemljevidov

Ponavljalec je kot kazalec, vendar ima več funkcij kot kazalec.

begin () noexcept

Vrne iterator, ki kaže na prvi par predmeta zemljevida, kot v naslednjem kodnem segmentu:

unordered_map<const char*, const char*>umap;

umap['banana'] = 'rumena';umap['grozdje'] = 'zelena';umap['figa'] = 'vijolična';

unordered_map<const char*, const char*> ::iteratoriter=umap.začeti();
par<const char*, const char*>pr= *iter;
stroški<<pr.prvi << ',' <<pr.drugič << ' n';

Izhod je: figa, vijolična. Zemljevid ni urejen.

begin () const noexcept;

Vrne iterator, ki kaže na prvi element zbirke objektov zemljevida. Ko je pred konstrukcijo objekta const, se namesto begin () izvede izraz begin () const. Pod tem pogojem elementov v predmetu ni mogoče spreminjati. Uporablja se na primer v naslednji kodi.

constunordered_map<const char*, const char*>umap({{'banana', 'rumena'},
{'grozdje', 'zelena'}, {'figa', 'vijolična'}});

unordered_map<const char*, const char*> ::const_iteratoriter=umap.začeti();
par<const char*, const char*>pr= *iter;
stroški<<pr.prvi << ',' <<pr.drugič << ' n';

Izhod je: figa, vijolična. Zemljevid ni urejen. Upoštevajte, da je bil const_iterator tokrat namesto samo iteratorja uporabljen za sprejem vrnjenega iteratorja.

end () noexcept

Vrne iterator, ki kaže neposredno na zadnji element predmeta zemljevida.

end () const noexcept

Vrne iterator, ki kaže neposredno na zadnji element predmeta zemljevida. Ko je pred konstrukcijo objekta zemljevida const, se namesto end () izvede izraz end () const.

unordered_map Operations

iskalnik iteratorja (const key_type & k)

Išče par danega ključa na zemljevidu. Če ga najdete, vrne iterator. Če ga ne najdete, vrne iterator, ki kaže na konec zemljevida, ki ni par. Naslednja koda prikazuje, kako uporabljati to funkcijo člana:

unordered_map<char,char>umap;

umap['do'] = 'b';umap['c'] = 'd';umap['In'] = 'f';

unordered_map<char,char> ::iteratoriter=umap.najti('c');
če (umap.najti('c') ! =umap.konec())
{
par<char,char>pr= *iter;
stroški<<pr.prvi << ',' <<pr.drugič << ' n';
}

Izhod je: c, d

const_iterator find (const key_type & k) const;

Ta različica funkcije se pokliče, če se ustvarjanje neurejenega zemljevida začne z const, tako da so vsi elementi zemljevida samo za branje.

unordered_map Modifiers

parni vložek (value_type && obj)
Neurejen zemljevid pomeni, da pari nista v nobenem vrstnem redu. Torej program vstavi par na poljubno mesto. Funkcija se vrne, par. Če je bil vnos uspešen, bo bool 1 za true, sicer pa 0 za false. Če je vstavljanje uspešno, bo iterator kazal na novo vstavljeni element. Naslednja koda ponazarja uporabo:

unordered_map<const char*, const char*>umap;

umap['banana'] = 'rumena';
umap['grozdje'] = 'zelena';
umap['figa'] = 'vijolična';

umap.vstavi({{'češnja', 'mreža'}, {'jagoda', 'mreža'}});

stroški<<umap.velikost() << ' n';

Izhod je: 5. Vstavite lahko več kot en par.

size_type brisanje (const key_type & k)

Ta funkcija izbriše par iz unordered_map. Naslednji kodni segment ponazarja:

unordered_map<const char*, const char*>umap;

umap['banana'] = 'rumena';
umap['grozdje'] = 'zelena';
umap['figa'] = 'vijolična';

intna enem=umap.izbrisati('grozdje');

stroški<<umap.velikost() << ' n';

Izhod je 2.
void swap (unordered_map &)
Dva neurejena zemljevida lahko zamenjate, kot je prikazano v tem segmentu kod:

unordered_map<const char*, const char*>umap1= {{'banana', 'rumena'},
{'grozdje', 'zelena'}, {'figa', 'vijolična'}, {'jagoda', 'mreža'}};

unordered_map<const char*, const char*>umap2= {{'češnja', 'mreža'}, {'apno', 'zelena'}};

umap1.zamenjati(umap2);

unordered_map<const char*, const char*> ::iteratoriter1=umap1.začeti();
par<const char*, const char*>pr1= *iter1;
unordered_map<const char*, const char*> ::iteratoriter2=umap2.začeti();
par<const char*, const char*>pr2= *iter2;

stroški<< 'Prvi ključ in velikost umap1:'<<pr1.prvi <<','<<umap1.velikost() << ' n';
stroški<< 'Prvi ključ in velikost umap2'<<pr2.prvi <<','<<umap2.velikost() << ' n';
unordered_map<const char*, const char*>umap1= {{'banana', 'rumena'},
{'grozdje', 'zelena'}, {'figa', 'vijolična'}, {'jagoda', 'mreža'}};
unordered_map<const char*, const char*>umap2= {{'češnja', 'mreža'}, {'apno', 'zelena'}};

umap1.zamenjati(umap2);

unordered_map<const char*, const char*> ::iteratoriter1=umap1.začeti();
par<const char*, const char*>pr1= *iter1;
unordered_map<const char*, const char*> ::iteratoriter2=umap2.začeti();
par<const char*, const char*>pr2= *iter2;

stroški<< 'Prvi ključ in velikost umap1:'<<pr1.prvi <<','<<umap1.velikost() << ' n';
stroški<< 'Prvi ključ in velikost umap2'<<pr2.prvi <<','<<umap2.velikost() << ' n';

Izhod je:

Prvi ključ in velikost umap1: apno, 2

Prvi ključ in velikost umap2 jagode, 4

Zemljevid ni urejen. Upoštevajte, da se dolžina zemljevida po potrebi poveča. Podatkovni tipi morajo biti enaki.

Razred in njegovi nenamerni predmeti

Vrednost je za podatkovni tip, kot je primerek za razred. Neurejena konstrukcija zemljevida lahko sprejme tudi razred kot podatkovni tip. Naslednji program to ponazarja:

#vključi
#vključi
z uporabo imenskega prostora std;

razred TheCla
{
javno:
intna enem;
statična charpogl;

ničnofunkcijo(charne, const char *str)
{
stroški<< 'Obstajajo' <<na enem<< 'knjige vredne' <<ne<<str<< 'v trgovini.' << ' n';
}
statična ničnozabavno(charpogl)
{
če (pogl== 'do')
stroški<< 'Uradna statična funkcija člana' << ' n';
}
};

intglavni()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;

unordered_map<const char*,TheCla>umap;
umap= {{'banana',obj1}, {'grozdje',obj2}, {'figa',obj3}, {'jagoda',obj4}, {'apno',obj5}};

stroški<<umap.velikost() << ' n';

vrnitev 0;
}

Izhod je: 5.

Opredelitev razreda ima dva javna člana podatkov in dve funkciji javnih članov. V funkciji main () so ustvarjeni različni predmeti za razred. Nato se ustvari neurejen zemljevid, kjer je vsak par sestavljen iz imena sadja in predmeta iz razreda. Prikaže se velikost zemljevida. Program se prevede brez opozorila ali sporočila o napaki.

Uporaba zemljevida

Niz povezuje indeks z vrednostjo. Pari ključ/vrednost obstajajo v mnogih življenjskih situacijah, ki jih je mogoče programirati. Par ključ/vrednost sadje/barva je le en primer. Drug primer je ime ljudi in njihova starost. V tem primeru bo par tipa, par. Lahko je tudi v paru. V slednjem primeru se bo uporabila direktiva o predhodni obdelavi. Par ključ/vrednost sta lahko še vedno imena zakonskih parov. V državah, kjer obstaja poligamija, bodo za enega moža različne žene.

Oblikovanje zemljevida

Zemljevid ni dvodimenzionalno polje z dvema stolpcema. Zemljevid deluje s funkcijo razpršitve. Ključ je kodiran s funkcijo razpršitve v celo število matrike. Ta matrika vsebuje vrednosti. Torej obstaja dejansko eno polje z vrednostmi, ključi pa so preslikani v indekse matrike, tako da se ustvarijo ustreznosti med ključi in vrednostmi. Razpršitev je obsežna tema in v tem članku ni obravnavana.

Zaključek

Zemljevid, znan tudi kot asociativna matrika, je seznam elementov, kjer je vsak element par ključ/vrednost. Torej, vsak ključ ustreza vrednosti. V C ++ je zemljevid izveden kot podatkovna struktura s funkcijami člani in operaterji. Urejen zemljevid je tisti, pri katerem so pari elementov razvrščeni po ključih. Neurejen zemljevid je tisti, kjer ni naročanja.

Tehnično je razpršitev sestavljena iz parnih elementov. Pravzaprav je par cela podatkovna struktura s svojimi članskimi funkcijami in operatorji. Dva parametra predloge za par sta enaka parametra predloge za unordered_map.

Initilizer_list za zemljevid je dobesedna literala niza. Vsak notranji literal je sestavljen iz dveh predmetov, para ključ/vrednost.

Funkcije člana in operaterji za unordered_map lahko kategoriziramo pod naslednjimi naslovi: unordered_map construction/copy constructing, unordered_map Capacity, unordered_map iterator, unordered_map Operations in unordered_map Modifiers.

Neurejen zemljevid se uporablja, ko je treba ključ preslikati v vrednost.

Chrys