Kako koristiti C ++ neuređenu kartu

How Use C Unordered Map



Karta, poznata i kao asocijativni niz, popis je elemenata gdje je svaki element par ključ/vrijednost. Dakle, svaki ključ odgovara vrijednosti. Različiti ključevi mogu imati istu vrijednost, za običan rad. Na primjer, ključevi mogu biti popis voća i odgovarajuće vrijednosti, boje plodova. U C ++ mapa je implementirana kao struktura podataka s funkcijama članovima i operatorima. Uređena karta je ona u kojoj su ključevi poredani parovi elemenata. Neuređena karta je ona u kojoj nema reda. Ovaj članak objašnjava kako se koristi C ++ neuređena karta, napisana kao unordered_map. Za razumijevanje ovog članka potrebno vam je znanje o C ++ pokazivačima. unordered_map dio je standardne biblioteke C ++.

Klasa i objekti

Klasa je skup varijabli i funkcija koje rade zajedno, pri čemu varijablama nemaju dodijeljene vrijednosti. Kad se varijablama dodijele vrijednosti, klasa postaje objekt. Različite vrijednosti date istoj klasi rezultiraju različitim objektima; odnosno različiti objekti su ista klasa s različitim vrijednostima. Za stvaranje objekta iz klase kaže se da predstavlja instanciranje objekta.







Ime, unordered_map, je klasa. Objekt kreiran iz klase unordered_map ima ime programera.



Funkcija koja pripada klasi potrebna je za instanciranje objekta iz klase. U C ++ ta funkcija ima isto ime kao i ime klase. Objekti stvoreni (instancirani) iz klase imaju različita imena koja im je dao programer.



Stvaranje objekta iz klase znači konstruiranje objekta; to također znači instanciranje.





C ++ program koji koristi klasu unordered_map počinje sa sljedećim redovima pri vrhu datoteke:

#uključi
#uključi
koristeći imenski prostor std;

Prvi redak služi za ulaz/izlaz. Drugi redak je dopustiti programu da koristi sve značajke klase unordered_map. Treći redak omogućuje programu korištenje imena u standardnom prostoru imena.



Preopterećenje funkcije

Kada dva ili više potpisa različitih funkcija 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/Kopiranje Konstrukcija

Jednostavna konstrukcija

Neuređena karta može se konstruirati i dodijeliti joj vrijednosti na sljedeći način:

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

umap['banana'] = 'žuta boja';
umap['grožđe'] = 'zelena';
umap['smokva'] = 'ljubičasta';

Deklaracija počinje specijalizacijom predloška s vrstama za parove ključ i vrijednost. Nakon toga slijedi izabran naziv programera za kartu; zatim točka -zarez. Drugi segment koda pokazuje kako dodijeliti vrijednosti njihovim ključevima.
Konstrukcija prema Initializer_list
To se može učiniti na sljedeći način:

unordered_map<konst char*, konst char*>umap({{'banana', 'žuta boja'},
{'grožđe', 'zelena'}, {'smokva', 'ljubičasta'}});

Konstrukcija dodjelom Initializer_list
Primjer:

unordered_map<konst char*, konst char*>umap= {{'banana', 'žuta boja'},
{'grožđe', 'zelena'}, {'smokva', 'ljubičasta'}};

Konstrukcija kopiranjem druge neuređene_karte
Primjer:

unordered_map<konst char*, konst char*>umap1({{'banana', 'žuta boja'},
{'grožđe', 'zelena'}, {'smokva', 'ljubičasta'}});
unordered_map<konst char*, konst char*>umap2(umap1);

Par Element

Sljedeći kôd pokazuje kako stvoriti i pristupiti elementu par:

par<char, konst char*>pr= {'d', 'biti'};
trošak<<pr.prvi << ' n';
trošak<<pr.drugi << ' n';

Izlaz je:

d
biti

prva i druga su rezervirane 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 o neuređenoj karti.

unordered_map Pristup elementu

mapped_type & operator [] (key_type && k)
Vraća vrijednost za odgovarajući ključ. Primjer:

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

umap['banana'] = 'žuta boja';
umap['grožđe'] = 'zelena';
umap['smokva'] = 'ljubičasta';

konst char *pravo=umap['grožđe'];

trošak<<pravo<<' n';

Izlaz je: zelen. Vrijednosti se mogu dodijeliti na isti način - vidi gore.

unordered_map Kapacitet

size_type size () const noexcept
Vraća broj parova na karti.

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

umap['banana'] = 'žuta boja';
umap['grožđe'] = 'zelena';
umap['smokva'] = 'ljubičasta';

trošak<<umap.veličina() <<' n';

Izlaz je 3.

bool empty () const noexcept

Vraća 1 za true ako karta nema par, a 0 za false ako ima parove. Primjer:

unordered_map<konst char*, konst char*>umap;
trošak<<umap.prazan() <<' n';

Izlaz je 1.

Vraćanje Iteratora i klase neuređene karte

Ponavljač je poput pokazivača, ali ima više funkcija od pokazivača.

begin () noexcept

Vraća iterator koji pokazuje na prvi par objekta karte, kao u sljedećem segmentu koda:

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

umap['banana'] = 'žuta boja';umap['grožđe'] = 'zelena';umap['smokva'] = 'ljubičasta';

unordered_map<konst char*, konst char*> ::iteratoriter=umap.početi();
par<konst char*, konst char*>pr= *iter;
trošak<<pr.prvi << ',' <<pr.drugi << ' n';

Izlaz je: smokva, ljubičasta. Karta nije uređena.

begin () const noexcept;

Vraća iterator koji pokazuje na prvi element zbirke objekata karte. Kad konstrukciji objekta prethodi const, umjesto begin () izvodi se izraz begin () const. Pod ovim uvjetom, elementi u objektu se ne mogu mijenjati. Koristi se u sljedećem kodu, na primjer.

konstunordered_map<konst char*, konst char*>umap({{'banana', 'žuta boja'},
{'grožđe', 'zelena'}, {'smokva', 'ljubičasta'}});

unordered_map<konst char*, konst char*> ::const_iteratoriter=umap.početi();
par<konst char*, konst char*>pr= *iter;
trošak<<pr.prvi << ',' <<pr.drugi << ' n';

Izlaz je: smokva, ljubičasta. Karta nije uređena. Imajte na umu da je const_iterator ovaj put korišten, umjesto samo iteratora, za primanje vraćenog iteratora.

end () noexcept

Vraća iterator koji pokazuje neposredno iza zadnjeg elementa objekta karte.

end () const noexcept

Vraća iterator koji pokazuje neposredno iza zadnjeg elementa objekta karte. Kada konstrukciji objekta karte prethodi const, umjesto end () izvodi se izraz end () const.

unordered_map Operations

pronalaženje iteratora (const key_type & k)

Traži par danog ključa na karti. Ako se pronađe, vraća iterator. Ako nije pronađen, vraća iterator koji pokazuje na kraj karte, koji nije par. Sljedeći kôd pokazuje kako se koristi ova funkcija člana:

unordered_map<char,char>umap;

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

unordered_map<char,char> ::iteratoriter=umap.pronaći('c');
ako (umap.pronaći('c') ! =umap.kraj())
{
par<char,char>pr= *iter;
trošak<<pr.prvi << ',' <<pr.drugi << ' n';
}

Izlaz je: c, d

const_iterator find (const key_type & k) const;

Ova se verzija funkcije naziva ako stvaranje neuređene karte započne s const, čineći sve elemente karte samo za čitanje.

unordered_map Modifiers

parni umetak (value_type && obj)
Neuređena karta znači da parovi nisu ni u kakvom redoslijedu. Dakle, program ubacuje par na bilo koje mjesto koje smatra prikladnim. Funkcija se vraća, uparite. Ako je umetanje bilo uspješno, bool će biti 1 za true, inače bi bilo 0 za false. Ako je umetanje uspješno, iterator će pokazati na novo umetnuti element. Sljedeći kôd ilustrira upotrebu:

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

umap['banana'] = 'žuta boja';
umap['grožđe'] = 'zelena';
umap['smokva'] = 'ljubičasta';

umap.umetnuti({{'trešnja', 'neto'}, {'jagoda', 'neto'}});

trošak<<umap.veličina() << ' n';

Izlaz je: 5. Može se umetnuti više od jednog para.

brisanje tipa veličine (tip ključa_konst. & k)

Ova funkcija briše par iz unordered_map. Sljedeći segment koda ilustrira:

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

umap['banana'] = 'žuta boja';
umap['grožđe'] = 'zelena';
umap['smokva'] = 'ljubičasta';

intna jedan=umap.izbrisati('grožđe');

trošak<<umap.veličina() << ' n';

Izlaz je 2.
void swap (unordered_map &)
Dvije neuređene karte mogu se zamijeniti, kako je prikazano u ovom segmentu koda:

unordered_map<konst char*, konst char*>umap1= {{'banana', 'žuta boja'},
{'grožđe', 'zelena'}, {'smokva', 'ljubičasta'}, {'jagoda', 'neto'}};

unordered_map<konst char*, konst char*>umap2= {{'trešnja', 'neto'}, {'vapno', 'zelena'}};

umap1.zamijeniti(umap2);

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

trošak<< 'Prvi ključ i veličina umap1:'<<pr1.prvi <<','<<umap1.veličina() << ' n';
trošak<< 'Prvi ključ i veličina umap2'<<pr2.prvi <<','<<umap2.veličina() << ' n';
unordered_map<konst char*, konst char*>umap1= {{'banana', 'žuta boja'},
{'grožđe', 'zelena'}, {'smokva', 'ljubičasta'}, {'jagoda', 'neto'}};
unordered_map<konst char*, konst char*>umap2= {{'trešnja', 'neto'}, {'vapno', 'zelena'}};

umap1.zamijeniti(umap2);

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

trošak<< 'Prvi ključ i veličina umap1:'<<pr1.prvi <<','<<umap1.veličina() << ' n';
trošak<< 'Prvi ključ i veličina umap2'<<pr2.prvi <<','<<umap2.veličina() << ' n';

Izlaz je:

Prvi ključ i veličina umap1: vapno, 2

Prvi ključ i veličina umap2 jagode, 4

Karta nije uređena. Imajte na umu da se duljina karte po potrebi povećava. Vrste podataka moraju biti iste.

Klasa i njezini upečatljivi objekti

Vrijednost je za tip podataka, kao što je instancirani objekt za klasu. Neuređena konstrukcija karte također može prihvatiti klasu kao tip podataka. Sljedeći program to ilustrira:

#uključi
#uključi
koristeći imenski prostor std;

klase TheCla
{
javnost:
intna jedan;
statički charCH;

poništitifunkcija(charNe, konst char *str)
{
trošak<< 'Tamo su ' <<na jedan<< 'knjige vrijede' <<Ne<<str<< ' u trgovini.' << ' n';
}
statički poništitizabava(charCH)
{
ako (CH== 'do')
trošak<< 'Službena statička funkcija člana' << ' n';
}
};

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

unordered_map<konst char*,TheCla>umap;
umap= {{'banana',obj1}, {'grožđe',obj2}, {'smokva',obj3}, {'jagoda',obj4}, {'vapno',obj5}};

trošak<<umap.veličina() << ' n';

povratak 0;
}

Izlaz je: 5.

Definicija klase ima dva javna člana podataka i dvije javne funkcije člana. U funkciji main () instanciraju se različiti objekti za klasu. Zatim se stvara neuređena karta, gdje se svaki par sastoji od imena voća i objekta iz klase. Prikazuje se veličina karte. Program se kompilira bez upozorenja ili poruke o pogrešci.

Primjena karte

Niz povezuje indeks s vrijednošću. 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 njihova dob. U tom će slučaju par biti tipa, par. Može biti i u paru. U potonjem će se slučaju primijeniti Direktiva o preddobradi. Par ključ/vrijednost i dalje mogu biti imena bračnih parova. U zemljama u kojima postoji poligamija bit će različitih žena za jednog muškarca.

Formiranje karte

Karta nije dvodimenzionalni niz s dva stupca. Karta radi s hash funkcijom. Ključ je kodiran hash funkcijom, u cijeli broj niza. Ovaj niz sadrži vrijednosti. Dakle, zapravo postoji jedan niz sa vrijednostima, a ključevi se mapiraju u indekse niza, pa se stvaraju podudarnosti između ključeva i vrijednosti. Raspršivanje je opsežna tema i nije obrađena u ovom članku.

Zaključak

Karta, poznata i kao asocijativni niz, popis je elemenata gdje je svaki element par ključ/vrijednost. Dakle, svaki ključ odgovara vrijednosti. U C ++ mapa je implementirana kao struktura podataka s funkcijama članovima i operatorima. Uređena karta je ona u kojoj su ključevi poredani parovi elemenata. Neuređena karta je ona u kojoj nema naručivanja.

Tehnički, raspršivanje se sastoji od parnih elemenata. Zapravo, par je cijela struktura podataka sa svojim funkcijama članicama i operatorima. Dva parametra predloška za par su ista dva parametra predloška za unordered_map.

Initilizer_list za mapu je literal literala niza. Svaki interni literal sastoji se od dva objekta, par ključ/vrijednost.

Funkcije članice i operatori za unordered_map mogu se kategorizirati u sljedeće naslove: unordered_map construction/copy constructing, unordered_map Capacity, unordered_map iterator, unordered_map Operations i unordered_map Modifiers.

Neuređena karta koristi se kada ključ treba mapirati na vrijednost.

Chrys