C ++

Kako uporabljati neurejeni zemljevid C ++

Kako uporabljati neurejeni zemljevid C ++
Zemljevid, znan tudi kot asociativno polje, je seznam elementov, kjer je vsak element par ključ / vrednost. Torej, vsak ključ ustreza vrednosti. Različne tipke imajo lahko enako vrednost za običajno delo. Na primer, tipke so lahko seznam sadja in ustrezne vrednosti, barve sadja. V C ++ je zemljevid implementiran kot podatkovna struktura s članskimi funkcijami in operatorji. Urejeni zemljevid je tisti, pri katerem so pari elementov razporejeni po tipkah. Neurejeni zemljevid je tisti, kjer ni urejenosti. V tem članku je razloženo, kako uporabljati neurejeni zemljevid C ++, zapisan kot unordered_map. Za razumevanje tega članka potrebujete znanje iz kazalcev C ++. unordered_map je del standardne knjižnice C ++.

Razred in predmeti

Razred je nabor spremenljivk in funkcij, ki delujejo skupaj, pri čemer spremenljivkam niso dodeljene vrednosti. Ko so spremenljivkam dodeljene vrednosti, razred postane objekt. Različne vrednosti, dane istemu razredu, povzročajo različne predmete; to pomeni, da so različni predmeti isti razred z različnimi vrednostmi. Ustvarjanje predmeta iz razreda naj bi ustvarilo primerek predmeta.

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

Funkcija, ki pripada razredu, je potrebna za primerek predmeta iz razreda. V C ++ ima ta funkcija enako ime kot ime razreda. Predmeti, ustvarjeni (primerki) iz razreda, imajo različna imena, ki jih jim da programer.

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

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

#include
#include
uporaba imenskega prostora std;

Prva vrstica je namenjena vhodu / izhodu. Druga vrstica je omogočiti programu uporabo vseh funkcij razreda unordered_map. Tretja vrstica programu omogoča uporabo imen v standardnem imenskem prostoru.

Preobremenitev funkcije

Če imata dva ali več različnih podpisov funkcij isto ime, naj bi bilo to ime preobremenjeno. Ko pokličete eno funkcijo, število in vrsta argumentov določite, katera funkcija se dejansko izvaja.

Gradnja / izdelava kopij

Enostavna gradnja

Neurejeni zemljevid je mogoče sestaviti in mu dodeliti vrednosti, kot sledi:

unordered_map umap;
umap ["banana"] = "rumena";
umap ["grozdje"] = "zeleno";
umap ["fig"] = "vijolična";

Izjava se začne s specializacijo predloge s tipi za pare ključ in vrednost. Sledi izbrano ime programerja za zemljevid; nato podpičje. Drugi segment kode prikazuje, kako njihovim tipkam dodeliti vrednosti.
Konstrukcija po Initializer_list
To lahko storite na naslednji način:

unordered_map umap ("banana", "rumena",
"grozdje", "zeleno", "fig", "vijolično");

Konstrukcija z dodelitvijo Initializer_list
Primer:

neurejena_mapa umap = "banana", "rumena",
"grozdje", "zeleno", "fig", "vijolično";

Konstrukcija s kopiranjem drugega neurejenega_karta
Primer:

neurejena_mapa umap1 ("banana", "rumena",
"grozdje", "zeleno", "fig", "vijolično");
neurejena_mapa umap2 (umap1);

Par Element

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

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

Rezultat je:

d
morje

prva in druga sta rezervirani besedi za dva elementa v paru. Vrednosti v paru je še vedno mogoče spremeniti s pomočjo prve in druge.

V temi neurejenega zemljevida se imenuje par, value_type.

unordered_map Dostop do elementa

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

neurejena_mapa umap;
umap ["banana"] = "rumena";
umap ["grozdje"] = "zeleno";
umap ["fig"] = "vijolična";
const char * ret = umap ["grozdje"];
cout << ret <<'\n';

Rezultat je: "zeleno". Vrednosti je mogoče dodeliti na enak način - glej zgoraj.

unordered_map Kapaciteta

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

neurejena_mapa umap;
umap ["banana"] = "rumena";
umap ["grozdje"] = "zeleno";
umap ["fig"] = "vijolična";
cout << umap.size() <<'\n';

Izhod je 3.

bool empty () const noexcept

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

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

Izhod je 1.

Vračajoči se iteratorji in razred neurejenega zemljevida

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 segmentu kode:

unordered_map umap;
umap ["banana"] = "rumena"; umap ["grozdje"] = "zeleno"; umap ["fig"] = "vijolična";
neurejena_mapa:: iterator iter = umap.začeti();
par pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

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

begin () const noexcept;

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

const unordered_map umap ("banana", "rumena",
"grozdje", "zeleno", "fig", "vijolično");
neurejena_mapa:: const_iterator iter = umap.začeti();
par pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

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

end () noexcept

Vrne iterator, ki kaže neposredno nad zadnjim elementom predmeta zemljevida.

end () const noexcept

Vrne iterator, ki kaže neposredno nad zadnjim elementom predmeta zemljevida. Ko je pred konstrukcijo objekta zemljevida const, se namesto »end ()« izvede izraz »end () const«.

unordered_map Operations

iskanje iteratorja (const key_type & k)

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

unordered_map umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map:: iterator iter = umap.najdi ('c');
if (umap.najdi ('c') != umap.konec ())

par pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

Rezultat je: c, d

const_iterator najdi (const key_type & k) const;

Ta različica funkcije se pokliče, če se ustvarjanje neurejenega zemljevida začne s const, zaradi česar so vsi elementi zemljevida samo za branje.

unordered_map Modifikatorji

par vstavi (vrsta_vrednosti && obj)
Neurejen zemljevid pomeni, da pari niso v nobenem vrstnem redu. Program torej vstavi par kjer koli se mu zdi primerno. Funkcija se vrne, par. Če je bilo vstavljanje uspešno, bool pomeni 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 umap;
umap ["banana"] = "rumena";
umap ["grozdje"] = "zeleno";
umap ["fig"] = "vijolična";
umap.vstavi ("češnja", "rdeča", "jagoda", "rdeča");
cout << umap.size() << '\n';

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

brisanje velikosti_tipa (const key_type & k)

Ta funkcija izbriše par iz neurejene_mape. Naslednji segment kode prikazuje:

unordered_map umap;
umap ["banana"] = "rumena";
umap ["grozdje"] = "zeleno";
umap ["fig"] = "vijolična";
int num = umap.brisanje ("grozdje");
cout << umap.size() << '\n';

Izhod je 2.
zamenjava praznine (neurejena_mapa &)
Dva neurejena zemljevida je mogoče zamenjati, kot je prikazano v tem segmentu kode:

unordered_map umap1 = "banana", "rumena",
"grozdje", "zeleno", "figa", "vijolično", "jagoda", "rdeče";
unordered_map umap2 = "češnja", "rdeča", "apno", "zelena";
umap1.zamenjaj (umap2);
unordered_map:: iterator iter1 = umap1.začeti();
par pr1 = * iter1;
unordered_map:: iterator iter2 = umap2.začeti();
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 = "banana", "rumena",
"grozdje", "zeleno", "fig", "vijolično", "jagoda", "rdeče";
unordered_map umap2 = "češnja", "rdeča", "apno", "zelena";
umap1.zamenjaj (umap2);
unordered_map:: iterator iter1 = umap1.začeti();
par pr1 = * iter1;
unordered_map:: iterator iter2 = umap2.začeti();
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';

Rezultat je:

Prvi ključ in velikost umap1: apno, 2

Prvi ključ in velikost jagode umap2, 4

Zemljevid ni urejen. Upoštevajte, da se dolžina zemljevida po potrebi poveča. Vrste podatkov morajo biti enake.

Razred in njegovi hitri predmeti

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

#include
#include
uporaba imenskega prostora std;
razred TheCla

javno:
int številka;
statični znak;
void func (char cha, const char * str)

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

statična praznina (char ch)

če (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, "grozdje", obj2, "fig", obj3, "jagoda", obj4, "apno", obj5;
cout << umap.size() << '\n';
vrnitev 0;

Rezultat je: 5.

Definicija razreda ima dva javna člana podatkov in dve javni funkciji člana. V funkciji main () se ustvarijo 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

Polje indeks poveže z vrednostjo. V mnogih življenjskih situacijah obstajajo pari ključ / vrednost, ki jih je mogoče programirati. Par ključ / vrednost sadje / barva je le en primer. Drug primer je ime ljudi in njihove starosti. V tem primeru bo par tipa, par. Lahko je tudi par. V slednjem primeru bo uporabljena direktiva o predhodni obdelavi. Par ključ / vrednost sta lahko še vedno imeni zakonskih parov. V državah, kjer obstaja poligamija, bodo za enega moškega različne žene.

Oblikovanje zemljevida

Zemljevid ni dvodimenzionalna matrika z dvema stolpcema. Zemljevid deluje s funkcijo razpršitve. Ključ je kodiran s funkcijo zgoščevanja v celo število matrike. Ta matrika vsebuje vrednosti. Torej, dejansko obstaja ena matrika z vrednostmi, ključi pa se preslikajo na indekse matrike in tako se ujemajo ključi in vrednosti. Razpršitev je obsežna tema in v tem članku ni zajeta.

Zaključek

Zemljevid, znan tudi kot asociativno polje, je seznam elementov, kjer je vsak element par ključ / vrednost. Torej, vsak ključ ustreza vrednosti. V C ++ je zemljevid implementiran kot podatkovna struktura s članskimi funkcijami in operatorji. Urejeni zemljevid je tisti, pri katerem so pari elementov razvrščeni po tipkah. Neurejeni zemljevid je tisti, kjer ni naročila.

Tehnično je hash sestavljen iz para elementi. Dejansko je par celotna podatkovna struktura s svojimi članskimi funkcijami in operaterji. Dva parametra predloge za par sta enaka dva parametra predloge za unordered_map.

Seznam inicializatorjev za zemljevid je literal matrike. Vsaka notranja literala je sestavljena iz dveh predmetov, para ključ / vrednost.

Funkcije članov in operatorje za neurejeno_mapo lahko razvrstimo pod naslednje naslove: neurejena_mapa gradnja / izdelava kopij, neurejena_mapa Kapaciteta, neurejena_mapa iterator, neurejena_mapa operacije in neurejeni_map modifikatorji.

Neurejeni zemljevid se uporablja, kadar je treba ključ preslikati na vrednost.

Chrys

Najboljše igre z ročnim sledenjem
Oculus Quest je pred kratkim predstavil odlično idejo ročnega sledenja brez krmilnikov. Z vedno večjim številom iger in dejavnosti, ki izvajajo podpor...
Kako prikazati prekrivanje zaslonskega menija v celozaslonskih aplikacijah in igrah za Linux
Igranje celozaslonskih iger ali uporaba aplikacij v celozaslonskem načinu brez motenj vam lahko odreže ustrezne sistemske informacije, ki so vidne na ...
Top 5 kartic za zajemanje iger
Vsi smo v YouTubu videli in oboževali pretakanje iger. PewDiePie, Jakesepticye in Markiplier so le nekateri izmed najboljših igralcev, ki so zaslužili...