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_mapumap ["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:
"grozdje", "zeleno", "fig", "vijolično");
Konstrukcija z dodelitvijo Initializer_list
Primer:
"grozdje", "zeleno", "fig", "vijolično";
Konstrukcija s kopiranjem drugega neurejenega_karta
Primer:
"grozdje", "zeleno", "fig", "vijolično");
neurejena_mapa
Par Element
Naslednja koda prikazuje, kako ustvariti in dostopati do elementa para:
parcout << pr.first << '\n';
cout << pr.second << '\n';
Rezultat je:
dmorje
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:
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.
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_mapacout << 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_mapumap ["banana"] = "rumena"; umap ["grozdje"] = "zeleno"; umap ["fig"] = "vijolična";
neurejena_mapa
par
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"grozdje", "zeleno", "fig", "vijolično");
neurejena_mapa
par
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_mapumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map
if (umap.najdi ('c') != umap.konec ())
par
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
Neurejen zemljevid pomeni, da pari niso v nobenem vrstnem redu. Program torej vstavi par kjer koli se mu zdi primerno. Funkcija se vrne, par
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_mapumap ["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:
"grozdje", "zeleno", "figa", "vijolično", "jagoda", "rdeče";
unordered_map
umap1.zamenjaj (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
"grozdje", "zeleno", "fig", "vijolično", "jagoda", "rdeče";
unordered_map
umap1.zamenjaj (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';
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 = "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
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
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