C ++

Kuinka käyttää C ++ n järjestämätöntä karttaa

Kuinka käyttää C ++ n järjestämätöntä karttaa
Kartta, joka tunnetaan myös nimellä assosiatiivinen taulukko, on luettelo elementeistä, joissa kukin elementti on avain / arvo-pari. Joten jokainen avain vastaa arvoa. Eri näppäimillä voi olla sama arvo tavallisessa työssä. Esimerkiksi avaimet voivat olla luettelo hedelmistä ja niitä vastaavat arvot, hedelmien värit. 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, jossa ei ole järjestystä. Tässä artikkelissa kerrotaan, kuinka C ++ - järjestämätöntä karttaa käytetään, joka on kirjoitettu järjestämättömänä kartana. Tarvitset tietoa C ++ -osoittimista tämän artikkelin ymmärtämiseksi. unordered_map on osa C ++ -standardikirjastoa.

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

järjestämätön kartta umap ("banaani", "keltainen",
"viinirypäle", "vihreä", "viikuna", "violetti");

Rakentaminen määrittämällä Initializer_list
Esimerkki:

järjestämätön kartta umap = "banaani", "keltainen",
"rypäle", "vihreä", "kuva", "violetti";

Rakentaminen kopioimalla toinen tilaamaton kartta
Esimerkki:

järjestämätön kartta umap1 ("banaani", "keltainen",
"viinirypäle", "vihreä", "viikuna", "violetti");
järjestämätön kartta umap2 (umap1);

Pari Elementti

Seuraava koodi näyttää pari-elementin luomisen ja käyttämisen:

pari pr = 'd', "meri";
cout << pr.first << '\n';
cout << pr.second << '\n';

Tuotos on:

d
meri

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:

järjestämätön kartta umap;
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.

järjestämätön kartta umap;
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 kartta umap;
cout << 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 kartta umap;
umap ["banaani"] = "keltainen"; umap ["rypäle"] = "vihreä"; umap ["fig"] = "violetti";
järjestämätön kartta:: iteraattori iter = umap.alkaa();
pari pr = * iter;
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 umap ("banaani", "keltainen",
"viinirypäle", "vihreä", "viikuna", "violetti");
järjestämätön kartta:: const_iterator iter = umap.alkaa();
pari pr = * iter;
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 kartta umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
järjestämätön kartta:: iteraattori iter = umap.löytää ('c');
jos (umap.löytää ('c') != umap.loppu ())

pari pr = * iter;
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 lisää (arvo_tyyppi && obj)
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. Jos lisäys onnistui, bool on 1 tosi, muuten se olisi 0 väärä. Jos lisäys onnistuu, iteraattori osoittaa juuri lisättyyn elementtiin. Seuraava koodi kuvaa käyttöä:

järjestämätön kartta umap;
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 kartta umap;
umap ["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:

järjestämätön kartta umap1 = "banaani", "keltainen",
"rypäle", "vihreä", "viikuna", "violetti", "mansikka", "punainen";
järjestämätön kartta umap2 = "kirsikka", "punainen", "lime", "vihreä";
umap1.vaihda (umap2);
järjestämätön kartta:: iteraattori iter1 = umap1.alkaa();
pari pr1 = * iter1;
järjestämätön kartta:: iteraattori iter2 = umap2.alkaa();
pari 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';
järjestämätön kartta umap1 = "banaani", "keltainen",
"rypäle", "vihreä", "viikuna", "violetti", "mansikka", "punainen";
järjestämätön kartta umap2 = "kirsikka", "punainen", "lime", "vihreä";
umap1.vaihda (umap2);
järjestämätön kartta:: iteraattori iter1 = umap1.alkaa();
pari pr1 = * iter1;
järjestämätön kartta:: iteraattori iter2 = umap2.alkaa();
pari 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';

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;
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. Se voi myös olla pari. Jälkimmäisessä tapauksessa käytetään esikäsittelydirektiiviä. Avain / arvo-pari voi silti olla avioparien nimet. Maissa, joissa on moniavioisuus, yhdelle miehelle tulee olemaan erilaisia ​​vaimoja.

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 elementtejä. Itse asiassa pari on koko tietorakenne, jossa on jäsenfunktiot ja operaattorit. Parin kaksi malliparametriä ovat samat kaksi malliparametriä järjestämättömälle kartalle.

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

Mouse left-click button not working on Windows 10
If you are using a dedicated mouse with your laptop, or desktop computer but the mouse left-click button is not working on Windows 10/8/7 for some rea...
Cursor jumps or moves randomly while typing in Windows 10
If you find that your mouse cursor jumps or moves on its own, automatically, randomly while typing in Windows laptop or computer, then some of these s...
How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...