Luokka ja esineet
Luokka on joukko muuttujia ja toimintoja, jotka toimivat yhdessä, jolloin muuttujiin ei ole määritetty arvoja. Kun muuttujille määritetään arvot, luokasta tulee objekti. Samalle luokalle annetut erilaiset arvot johtavat erilaisiin kohteisiin; toisin sanoen eri objektit ovat samaa luokkaa ja eri arvot. Objektin luomisen luokasta sanotaan välittävän objektin.
Nimi unordered_map on luokka. Luokasta unordered_map luodulla objektilla on ohjelmoijan valitsema nimi.
Luokkaan kuuluva toiminto tarvitaan objektin luomiseksi luokasta. C ++: ssa kyseisellä funktiolla on sama nimi kuin luokan nimellä. Luokalta luotuilla (instantioiduilla) esineillä on eri nimet, jotka ohjelmoija antaa heille.
Objektin luominen luokasta tarkoittaa objektin rakentamista; se tarkoittaa myös välittymistä.
C ++ -ohjelma, joka käyttää unordered_map-luokkaa, alkaa seuraavista riveistä tiedoston yläosassa:
#sisältää#sisältää
käyttämällä nimitilaa vakio;
Ensimmäinen rivi on syötettä / lähtöä varten. Toisen rivin on annettava ohjelman käyttää kaikkia unordered_map-luokan ominaisuuksia. Kolmannen rivin avulla ohjelma voi käyttää nimiä tavallisessa nimiavaruudessa.
Toiminnon ylikuormitus
Kun kahdella tai useammalla eri funktion allekirjoituksella on sama nimi, kyseisen nimen sanotaan olevan ylikuormitettu. Kun kutsutaan yhtä funktiota, argumenttien määrä ja tyyppi, määritä mikä funktio todella suoritetaan.
Rakentaminen / kopioiden rakentaminen
Yksinkertainen rakenne
Järjestämätön kartta voidaan rakentaa ja määrittää arvot seuraavasti:
järjestämätön karttaumap ["banaani"] = "keltainen";
umap ["rypäle"] = "vihreä";
umap ["fig"] = "violetti";
Ilmoitus alkaa mallien erikoistumisella avain- ja arvoparien tyypeillä. Tätä seuraa ohjelmoijan valitsema nimi kartalle; sitten puolipiste. Toinen koodisegmentti näyttää kuinka arvot voidaan määrittää niiden avaimille.
Rakentaja Initializer_list
Tämä voidaan tehdä seuraavasti:
"viinirypäle", "vihreä", "viikuna", "violetti");
Rakentaminen määrittämällä Initializer_list
Esimerkki:
"rypäle", "vihreä", "kuva", "violetti";
Rakentaminen kopioimalla toinen tilaamaton kartta
Esimerkki:
"viinirypäle", "vihreä", "viikuna", "violetti");
järjestämätön kartta
Pari Elementti
Seuraava koodi näyttää pari-elementin luomisen ja käyttämisen:
paricout << pr.first << '\n';
cout << pr.second << '\n';
Tuotos on:
dmeri
ensimmäinen ja toinen ovat varattuja sanoja parin kahdelle kohteelle. Parin arvoja voidaan silti muuttaa käyttämällä ensimmäistä ja toista.
Järjestämättömän kartan aiheessa kutsutaan paria value_type.
unordered_map Elementin käyttö
mapped_type & operaattori [] (key_type && k)
Palauttaa vastaavan avaimen arvon. Esimerkki:
umap ["banaani"] = "keltainen";
umap ["rypäle"] = "vihreä";
umap ["fig"] = "violetti";
const char * ret = umap ["rypäle"];
cout << ret <<'\n';
Tulos on: "vihreä". Arvot voidaan määrittää samalla tavalla - katso yllä.
unordered_map Kapasiteetti
size_type size () const noexcept
Palauttaa parien määrän kartalla.
umap ["banaani"] = "keltainen";
umap ["rypäle"] = "vihreä";
umap ["fig"] = "violetti";
cout << umap.size() <<'\n';
Lähtö on 3.
bool tyhjä () const noexcept
Palauttaa arvon 1 tosi, jos kartalla ei ole paria, ja arvon 0 epätosi, jos kartalla on pareja. Esimerkki:
järjestämätön karttacout << umap.empty() <<'\n';
Lähtö on 1.
Palauttavat iteraattorit ja järjestämättömät karttaluokat
Iteraattori on kuin osoitin, mutta sillä on enemmän toimintoja kuin osoittimella.
alkaa () noexcept
Palauttaa iteraattorin, joka osoittaa karttaobjektin ensimmäiseen pariin, kuten seuraavassa koodisegmentissä:
järjestämätön karttaumap ["banaani"] = "keltainen"; umap ["rypäle"] = "vihreä"; umap ["fig"] = "violetti";
järjestämätön kartta
pari
cout << pr.first << ", " << pr.second << '\n';
Tulos on: kuva, violetti. Karttaa ei ole järjestetty.
begin () const noexcept;
Palauttaa iteraattorin, joka osoittaa karttaobjektikokoelman ensimmäiseen elementtiin. Kun objektin rakentamista edeltää const, suoritetaan lauseke “begin () const” suorituksen sijaan ”begin ()”. Tässä tilanteessa objektin elementtejä ei voi muokata. Sitä käytetään esimerkiksi seuraavassa koodissa.
const järjestämätön kartta"viinirypäle", "vihreä", "viikuna", "violetti");
järjestämätön kartta
pari
cout << pr.first << ", " << pr.second << '\n';
Tulos on: kuva, violetti. Karttaa ei ole järjestetty. Huomaa, että const_iteratoria on käytetty tällä kertaa pelkästään iteraattorin sijasta palautetun iteraattorin vastaanottamiseen.
end () noexcept
Palauttaa iteraattorin, joka osoittaa välittömästi karttaobjektin viimeisen elementin taakse.
end () const noexcept
Palauttaa iteraattorin, joka osoittaa välittömästi karttaobjektin viimeisen elementin taakse. Kun karttaobjektin rakentamista edeltää const, lauseke “end () const” suoritetaan sanan “end ()” sijaan.
unordered_map-toiminnot
iteraattorin haku (const key_type & k)
Etsitään tietyn avaimen paria kartalta. Jos se löytyy, se palauttaa iteraattorin. Jos sitä ei löydy, se palauttaa iteraattorin, joka osoittaa kartan loppuun, joka ei ole pari. Seuraava koodi näyttää, kuinka tätä jäsenfunktiota käytetään:
järjestämätön karttaumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
järjestämätön kartta
jos (umap.löytää ('c') != umap.loppu ())
pari
cout << pr.first << ", " << pr.second << '\n';
Lähtö on: c, d
const_iterator etsi (const key_type & k) const;
Tätä funktion versiota kutsutaan, jos järjestämättömän kartan luominen alkaa const: lla, jolloin kartan kaikki elementit luetaan vain.
unordered_map-muokkaajat
pari
Järjestämätön kartta tarkoittaa, että parit eivät ole missään järjestyksessä. Joten ohjelma lisää parin mihin tahansa sopivaan paikkaan. Funktio palaa, pari
umap ["banaani"] = "keltainen";
umap ["rypäle"] = "vihreä";
umap ["fig"] = "violetti";
umap.insert ("kirsikka", "punainen", "mansikka", "punainen");
cout << umap.size() << '\n';
Lähtö on: 5. Useita pareja voidaan lisätä.
size_type erase (const key_type & k)
Tämä toiminto poistaa parin järjestämättömästä kartasta. Seuraava koodisegmentti kuvaa:
järjestämätön karttaumap ["banaani"] = "keltainen";
umap ["rypäle"] = "vihreä";
umap ["fig"] = "violetti";
int numero = umap.pyyhi ("rypäle");
cout << umap.size() << '\n';
Lähtö on 2.
void swap (järjestämätön_kartta ja)
Kaksi järjestämätöntä karttaa voidaan vaihtaa, kuten tässä koodisegmentissä kuvataan:
"rypäle", "vihreä", "viikuna", "violetti", "mansikka", "punainen";
järjestämätön kartta
umap1.vaihda (umap2);
järjestämätön kartta
pari
järjestämätön kartta
pari
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
järjestämätön kartta
"rypäle", "vihreä", "viikuna", "violetti", "mansikka", "punainen";
järjestämätön kartta
umap1.vaihda (umap2);
järjestämätön kartta
pari
järjestämätön kartta
pari
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Tuotos on:
Ensimmäinen avain ja umap1-koko: kalkki, 2
Ensimmäinen avain ja umap2-mansikan koko, 4
Karttaa ei ole järjestetty. Huomaa, että kartan pituutta lisätään tarvittaessa. Tietotyyppien on oltava samat.
Luokka ja sen välittömät objektit
Arvo on tietotyypille, kuten instantisoitu kohde on luokalle. Järjestämätön kartanrakenne voi myös hyväksyä luokan tietotyypiksi. Seuraava ohjelma kuvaa tätä:
#sisältää#sisältää
käyttämällä nimitilaa vakio;
luokka TheCla
julkinen:
int numero;
staattinen hiili;
void func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
staattinen tyhjä hauska (char ch)
jos (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
The Cla obj1; The Cla obj2; The Cla obj3; The Cla obj4; The Cla obj5;
järjestämätön kartta
umap = "banaani", obj1, "rypäle", obj2, "kuva", obj3, "mansikka", obj4, "kalkki", obj5;
cout << umap.size() << '\n';
paluu 0;
Lähtö on: 5.
Luokan määrittelyssä on kaksi julkisen datan jäsentä ja kaksi julkisen jäsenen toimintoa. Main () -funktiossa luokan eri objektit instantisoidaan. Sitten järjestetään järjestämätön kartta, jossa kukin pari koostuu hedelmän ja luokan objektin nimestä. Kartan koko näytetään. Ohjelma kääntyy ilman varoitusta tai virheilmoitusta.
Kartan käyttö
Taulukko yhdistää indeksin arvoon. Avain / arvo-pareja on monissa elämän tilanteissa, jotka voidaan ohjelmoida. Hedelmien / värien avain / arvo-pari on vain yksi esimerkki. Toinen esimerkki on ihmisten nimi ja ikä. Tässä tapauksessa pari on tyyppiä, pari
Kartan muodostaminen
Kartta ei ole kaksiulotteinen taulukko, jossa on kaksi saraketta. Kartta toimii hash-toiminnolla. Hajautusfunktio koodaa avaimen taulukon kokonaislukuksi. Juuri tämä taulukko pitää arvot. Joten arvoja on itse asiassa yksi taulukko, ja avaimet kartoitetaan taulukon indekseihin, joten avainten ja arvojen väliset vastaavuudet tehdään. Hajautus on laaja aihe, jota ei käsitellä tässä artikkelissa.
Johtopäätös
Kartta, joka tunnetaan myös nimellä assosiatiivinen taulukko, on luettelo elementeistä, joissa kukin elementti on avain / arvo-pari. Joten jokainen avain vastaa arvoa. C ++: ssa kartta toteutetaan tietorakenteena, jossa on jäsenfunktioita ja operaattoreita. Järjestetty kartta on sellainen, jossa elementtiparit on järjestetty näppäimillä. Järjestämätön kartta on sellainen, josta ei ole järjestystä.
Teknisesti hajautus koostuu parista
Kartan alustuslista on taulukon literaali. Jokainen sisäinen literaali koostuu kahdesta objektista, avain / arvo-parista.
Jäsentoiminnot ja operaattorit tilaamattomalle kartalle voidaan luokitella seuraaviin otsakkeisiin: tilaamaton_kartan rakentaminen / kopion luominen, tilaamaton_kartan kapasiteetti, tilaamaton_kartan iteraattori, tilaamaton_kartan toiminnot ja tilaamaton_mapin muokkaajat.
Järjestämätöntä karttaa käytetään, kun avain on kartoitettava arvoon.
Chrys