Klasa i predmeti
Klasa je skup varijabli i funkcija koje rade zajedno, gdje varijable nemaju dodijeljene vrijednosti. Kada su vrijednosti dodijeljene varijablama, klasa postaje objekt. Različite vrijednosti dane istoj klasi rezultiraju različitim objektima; odnosno različiti su objekti ista klasa s različitim vrijednostima. Stvaranje objekta iz klase kaže se kao instanciranje objekta.
Ime, neuređena_mapa, je klasa. Objekt stvoren iz klase unordered_map ima izabrano ime programera.
Funkcija koja pripada klasi potrebna je za instanciranje objekta iz klase. U C ++-u ta funkcija ima isto ime kao i naziv klase. Objekti stvoreni (instancirani) iz klase imaju različita imena koja im daje programer.
Stvaranje objekta iz klase znači konstrukciju objekta; to također znači instanciranje.
Program C ++ koji koristi klasu unordered_map započinje sljedećim redovima na vrhu datoteke:
#include#include
pomoću prostora imena std;
Prvi redak je za ulaz / izlaz. Drugi redak je omogućiti programu da koristi sve značajke klase unordered_map. Treći redak omogućuje programu da koristi imena u standardnom prostoru imena.
Preopterećenje funkcije
Kad dva ili više različitih potpisa funkcije imaju isto ime, kaže se da je to ime preopterećeno. Kada se pozove jedna funkcija, broj i vrsta argumenata određuju koja se funkcija zapravo izvršava.
Izgradnja / Izrada kopija
Jednostavna konstrukcija
Neuređena karta može se konstruirati i dodijeliti joj vrijednosti na sljedeći način:
neuređena_mapaumap ["banana"] = "žuta";
umap ["grožđe"] = "zeleno";
umap ["fig"] = "ljubičasta";
Deklaracija započinje specijalizacijom predloška s vrstama za parove ključ i vrijednost. Nakon toga slijedi izabrano ime programera za kartu; zatim zarezom. Drugi segment koda pokazuje kako dodijeliti vrijednosti njihovim ključevima.
Izgradnja popisa Initializer_list
To se može učiniti na sljedeći način:
"grožđe", "zeleno", "smokva", "ljubičasto");
Izgradnja dodjeljivanjem Initializer_list
Primjer:
"grožđe", "zeleno", "smokva", "ljubičasto";
Izgradnja kopiranjem druge neuređene_karte
Primjer:
"grožđe", "zeleno", "smokva", "ljubičasto");
neuređena_mapa
Par Element
Sljedeći kod pokazuje kako stvoriti i pristupiti elementu para:
parcout << pr.first << '\n';
cout << pr.second << '\n';
Izlaz je:
dmore
prva i druga rezervirane su riječi za dvije stavke u paru. Vrijednosti u paru i dalje se mogu mijenjati pomoću prve i druge.
Par se naziva, value_type u temi nesređene karte.
unordered_map Pristup elementu
mapirani_tip & operator [] (tip_tip && k)
Vraća vrijednost za odgovarajući ključ. Primjer:
umap ["banana"] = "žuta";
umap ["grožđe"] = "zeleno";
umap ["fig"] = "ljubičasta";
const char * ret = umap ["grožđe"];
cout << ret <<'\n';
Rezultat je: "zeleno". Vrijednosti se mogu dodijeliti na isti način - vidi gore.
unordered_map Kapacitet
size_type size () const noexcept
Vraća broj parova na karti.
umap ["banana"] = "žuta";
umap ["grožđe"] = "zeleno";
umap ["fig"] = "ljubičasta";
cout << umap.size() <<'\n';
Izlaz je 3.
bool empty () const noexcept
Vraća 1 za true ako karta nema para i 0 za false ako ima parove. Primjer:
neuređena_mapacout << umap.empty() <<'\n';
Izlaz je 1.
Povratak iteratora i klasa neuređenih mapa
Iterator je poput pokazivača, ali ima više funkcionalnosti od pokazivača.
begin () noexcept
Vraća iterator koji pokazuje na prvi par objekta karte, kao u sljedećem segmentu koda:
neuređena_mapaumap ["banana"] = "žuta"; umap ["grožđe"] = "zeleno"; umap ["fig"] = "ljubičasta";
neuređena_mapa
par
cout << pr.first << ", " << pr.second << '\n';
Izlaz je: smokva, ljubičasta. Karta je neuređena.
begin () const noexcept;
Vraća iterator koji pokazuje na prvi element zbirke objekata karte. Kada konstrukciji objekta prethodi const, umjesto "begin ()" izvršava se izraz "begin () const". Pod tim se uvjetima elementi u objektu ne mogu mijenjati. Na primjer, koristi se u sljedećem kodu.
const neuređena_mapa"grožđe", "zeleno", "smokva", "ljubičasto");
neuređena_mapa
par
cout << pr.first << ", " << pr.second << '\n';
Izlaz je: smokva, ljubičasta. Karta je neuređena. Imajte na umu da je const_iterator ovaj put korišten umjesto samo iteratora za primanje vraćenog iteratora.
kraj () noexcept
Vraća iterator koji usmjerava neposredno iza zadnjeg elementa objekta karte.
end () const noexcept
Vraća iterator koji usmjerava neposredno iza zadnjeg elementa objekta karte. Kada konstrukciji objekta karte prethodi const, umjesto "end ()" izvršava se izraz "end () const".
unordered_map Operations
pronalaženje iteratora (const key_type & k)
Traži par datog ključa na karti. Ako je pronađen, vraća iterator. Ako nije pronađen, vraća iterator koji pokazuje na kraj karte, a to nije par. Sljedeći kod pokazuje kako se koristi ova funkcija člana:
neuređena_mapaumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
neuređena_mapa
ako (umap.pronađi ('c') != umap.kraj())
par
cout << pr.first << ", " << pr.second << '\n';
Izlaz je: c, d
const_iterator pronađi (const key_type & k) const;
Ova se verzija funkcije poziva ako stvaranje neuređene karte započne s const, čineći sve elemente karte samo za čitanje.
unordered_map Modifikatori
par
Neuređena karta znači da parovi nisu u bilo kojem redoslijedu. Dakle, program ubacuje par na bilo koje mjesto koje smatra prikladnim. Funkcija se vraća, upari
umap ["banana"] = "žuta";
umap ["grožđe"] = "zeleno";
umap ["fig"] = "ljubičasta";
umap.umetak ("trešnja", "crvena", "jagoda", "crvena");
cout << umap.size() << '\n';
Izlaz je: 5. Može se umetnuti više od jednog para.
brisanje veličine_tipa (const key_type & k)
Ova funkcija briše par iz neuređene_karte. Slijedi sljedeći segment koda:
neuređena_mapaumap ["banana"] = "žuta";
umap ["grožđe"] = "zeleno";
umap ["fig"] = "ljubičasta";
int num = umap.izbrisati ("grožđe");
cout << umap.size() << '\n';
Izlaz je 2.
zamjena praznina (neuređena_mapa &)
Dvije neuređene karte mogu se zamijeniti, kao što je prikazano u ovom segmentu koda:
"grožđe", "zeleno", "smokva", "ljubičasta", "jagoda", "crvena";
neuređena_mapa
umap1.zamijeniti (umap2);
neuređena_mapa
par
neuređena_mapa
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';
neuređena_mapa
"grožđe", "zeleno", "smokva", "ljubičasta", "jagoda", "crvena";
neuređena_mapa
umap1.zamijeniti (umap2);
neuređena_mapa
par
neuređena_mapa
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';
Izlaz je:
Prvi ključ i veličina umap1: vapno, 2
Prvi ključ i veličina umap2 jagode, 4
Karta je neuređena. Ako je potrebno, dužina karte se povećava. Tipovi podataka moraju biti isti.
Klasa i njezini instancirani objekti
Vrijednost je za tip podataka, kao instancirani objekt za klasu. Neuređena konstrukcija karte također može prihvatiti klasu kao vrstu podataka. Sljedeći program to ilustrira:
#include#include
pomoću prostora imena std;
razred TheCla
javnost:
int num;
statički char ch;
void func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
statična šupljina (char ch)
ako (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
neuređena_mapa
umap = "banana", obj1, "grožđe", obj2, "smokva", obj3, "jagoda", obj4, "limeta", obj5;
cout << umap.size() << '\n';
return 0;
Izlaz je: 5.
Definicija razreda ima dva člana javnog podataka i dvije javne funkcije člana. U funkciji main () instanciraju se različiti objekti za klasu. Zatim se uspostavlja neuređena karta, gdje se svaki par sastoji od imena voća i predmeta iz klase. Prikazuje se veličina karte. Program se kompajlira bez upozorenja ili poruke o pogrešci.
Primjena karte
Niz pridružuje indeks vrijednosti. Parovi ključ / vrijednost postoje u mnogim životnim situacijama, koje se mogu programirati. Par ključ / vrijednost voće / boja samo je jedan primjer. Drugi primjer je ime ljudi i njihove dobi. U ovom slučaju, par će biti tipa, par
Formiranje karte
Karta nije dvodimenzionalni niz s dva stupca. Karta radi s hash funkcijom. Ključ je šifriran funkcijom hash, u cijeli broj niza. Taj niz drži vrijednosti. Dakle, zapravo postoji jedan niz s vrijednostima, a ključevi se preslikavaju na indekse niza, pa se stoga podudaraju ključevi i vrijednosti. Hashing je opsežna tema i nije obuhvaćen ovim člankom.
Zaključak
Karta, poznata i kao asocijativni niz, je popis elemenata, gdje je svaki element par ključ / vrijednost. Dakle, svaki ključ odgovara vrijednosti. U C ++, karta je implementirana kao struktura podataka s funkcijama člana i operatorima. Uređena karta je ona na kojoj su parovi elemenata poredani po ključevima. Neuređena karta je ona na kojoj nema naručivanja.
Tehnički se hash sastoji od para
Lista inicijalizatora za kartu je literal niza literala. Svaki interni literal sastoji se od dva objekta, para ključ / vrijednost.
Funkcije člana i operatori za neuređenu_mapu mogu se kategorizirati u slijedeće naslove: neuređena_mapa konstrukcija / izrada kopija, neuređena_mapa Kapacitet, neuređena_mapa iterator, neuređena_mapa operacije i neuređeni_map modifikatori.
Neuređena karta koristi se kada se ključ mora preslikati u vrijednost.
Chrys