C ++

Kako se koristi C ++ neuređena karta

Kako se koristi C ++ neuređena karta
Karta, poznata i kao asocijativni niz, je popis elemenata, gdje je svaki element par ključ / vrijednost. Dakle, svaki ključ odgovara vrijednosti. Različiti ključevi mogu imati istu vrijednost, za uobičajeni rad. Na primjer, tipke mogu biti popis voća i odgovarajuće vrijednosti, boje plodova. 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 reda. Ovaj članak objašnjava kako koristiti C ++ neuređenu kartu, napisanu kao unordered_map. Potrebno vam je znanje iz C ++ pokazivača da biste razumjeli ovaj članak. unordered_map dio je C ++ standardne biblioteke.

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_mapa umap;
umap ["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:

neuređena_mapa umap ("banana", "žuta",
"grožđe", "zeleno", "smokva", "ljubičasto");

Izgradnja dodjeljivanjem Initializer_list
Primjer:

neuređena_mapa umap = "banana", "žuta",
"grožđe", "zeleno", "smokva", "ljubičasto";

Izgradnja kopiranjem druge neuređene_karte
Primjer:

neuređena_mapa umap1 ("banana", "žuta",
"grožđe", "zeleno", "smokva", "ljubičasto");
neuređena_mapa umap2 (umap1);

Par Element

Sljedeći kod pokazuje kako stvoriti i pristupiti elementu para:

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

Izlaz je:

d
more

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:

neuređena_mapa umap;
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.

neuređena_mapa umap;
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_mapa umap;
cout << 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_mapa umap;
umap ["banana"] = "žuta"; umap ["grožđe"] = "zeleno"; umap ["fig"] = "ljubičasta";
neuređena_mapa:: iterator iter = umap.početi();
par pr = * iter;
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 umap ("banana", "žuta",
"grožđe", "zeleno", "smokva", "ljubičasto");
neuređena_mapa:: const_iterator iter = umap.početi();
par pr = * iter;
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_mapa umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
neuređena_mapa:: iterator iter = umap.pronađi ('c');
ako (umap.pronađi ('c') != umap.kraj())

par pr = * iter;
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 umetni (vrsta_vrijednosti && obj)
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. Ako je umetanje uspješno, bool će biti 1 za true, inače bi bio 0 za false. Ako je umetanje uspješno, tada će iterator pokazati na novo umetnuti element. Sljedeći kod ilustrira upotrebu:

neuređena_mapa umap;
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_mapa umap;
umap ["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:

neuređena_mapa umap1 = "banana", "žuta",
"grožđe", "zeleno", "smokva", "ljubičasta", "jagoda", "crvena";
neuređena_mapa umap2 = "trešnja", "crvena", "limeta", "zelena";
umap1.zamijeniti (umap2);
neuređena_mapa:: iterator iter1 = umap1.početi();
par pr1 = * iter1;
neuređena_mapa:: iterator iter2 = umap2.poč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';
neuređena_mapa umap1 = "banana", "žuta",
"grožđe", "zeleno", "smokva", "ljubičasta", "jagoda", "crvena";
neuređena_mapa umap2 = "trešnja", "crvena", "limeta", "zelena";
umap1.zamijeniti (umap2);
neuređena_mapa:: iterator iter1 = umap1.početi();
par pr1 = * iter1;
neuređena_mapa:: iterator iter2 = umap2.poč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';

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;
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. Može biti i par. U potonjem će se slučaju primijeniti smjernica o prethodnoj obradi. Par ključ / vrijednost i dalje mogu biti imena bračnih parova. U zemljama u kojima postoji poligamija, postojat će različite žene za jednog muškarca.

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 elementi. 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.

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

Kako instalirati League Of Legends na Ubuntu 14.04
Ako ste ljubitelj League of Legends, ovo je prilika za vas da testirate League of Legends. Imajte na umu da je LOL podržan na PlayOnLinux ako ste kori...
Instalirajte najnoviju strategiju igre OpenRA na Ubuntu Linux
OpenRA je Libre / Free Real Time strateški pokretač igre koji stvara rane Westwoodove igre poput klasične Command & Conquer: Red Alert. Distribuirani ...
Instalirajte najnoviji Dolphin Emulator za Gamecube i Wii na Linux
Dolphin Emulator omogućuje vam igranje odabranih Gamecube i Wii igara na Linux osobnim računalima (PC). Dolphin Emulator je slobodno dostupan i emula...