A C ++ rendezetlen térkép használata

How Use C Unordered Map



A térkép, más néven asszociatív tömb az elemek listája, ahol minden elem egy kulcs/érték pár. Tehát minden kulcs egy értéknek felel meg. A különböző kulcsok azonos értékűek lehetnek, a normál munkához. Például a kulcsok lehetnek gyümölcsök listája és a megfelelő értékek, a gyümölcsök színei. A C ++ rendszerben a térképet adatszerkezetként valósítják meg tagfunkciókkal és operátorokkal. A rendezett térkép az, ahol az elempárokat kulcsok alapján rendezték el. A rendezetlen térkép az, ahol nincs rend. Ez a cikk elmagyarázza, hogyan kell használni a C ++ rendezetlen térképet, amelyet unordered_map néven írnak. A cikk megértéséhez C ++ mutatókra van szüksége. Az unordered_map a C ++ szabványos könyvtár része.

Osztály és tárgyak

Az osztály olyan változók és függvények együttese, amelyek együtt működnek, és ahol a változókhoz nincs hozzárendelve érték. Ha értékeket rendelnek a változókhoz, az osztály objektummá válik. Az azonos osztálynak adott különböző értékek különböző objektumokat eredményeznek; vagyis a különböző objektumok ugyanaz az osztály, különböző értékekkel. Egy objektum osztályból való létrehozása azt jelenti, hogy az objektum példányosítása.







A név, unordered_map, egy osztály. Az unordered_map osztályból létrehozott objektum neve egy programozó.



Egy osztályhoz tartozó függvényre van szükség az objektum osztályból való példányosításához. C ++ - ban ez a függvény ugyanazzal a névvel rendelkezik, mint az osztály neve. Az osztályból létrehozott (példányosított) objektumoknak a programozó különböző neveket adott.



Objektum létrehozása az osztályból az objektum felépítését jelenti; azonnali beavatkozást is jelent.





A C ++ program, amely az unordered_map osztályt használja, a következő sorokkal kezdődik a fájl tetején:

#befoglalni
#befoglalni
névtér standard használatával;

Az első sor a bemenet/kimenet. A második sor az, hogy a program használhatja az unordered_map osztály összes szolgáltatását. A harmadik sor lehetővé teszi a program számára, hogy a szabványos névtérben lévő neveket használja.



Egy funkció túlterhelése

Ha két vagy több különböző funkció -aláírás azonos névvel rendelkezik, akkor ez a név túlterhelt. Egy függvény meghívásakor az argumentumok száma és típusa határozza meg, hogy melyik függvény valósul meg.

Építés/másolás készítése

Egyszerű felépítés

A rendezetlen térkép az alábbiak szerint állítható össze és rendelhető hozzá értékek:

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

umap['banán'] = 'sárga';
umap['szőlő'] = 'zöld';
umap['ábra'] = 'lila';

A nyilatkozat a sablon specializációval kezdődik, a kulcs- és értékpárok típusaival. Ezt követi a programozó választott neve a térképhez; majd pontosvessző. A második kódszegmens megmutatja, hogyan kell értékeket rendelni a kulcsokhoz.
Építés az Initializer_list segítségével
Ezt a következőképpen teheti meg:

unordered_map<const char*, const char*>umap({{'banán', 'sárga'},
{'szőlő', 'zöld'}, {'ábra', 'lila'}});

Építés az Initializer_list hozzárendelésével
Példa:

unordered_map<const char*, const char*>umap= {{'banán', 'sárga'},
{'szőlő', 'zöld'}, {'ábra', 'lila'}};

Építés más rendetlen_térkép másolásával
Példa:

unordered_map<const char*, const char*>umap1({{'banán', 'sárga'},
{'szőlő', 'zöld'}, {'ábra', 'lila'}});
unordered_map<const char*, const char*>umap2(umap1);

Az Elem páros

A következő kód bemutatja a pár elem létrehozását és elérését:

pár<char, const char*>pr= {'d', 'lenni'};
költség<<pr.első << ' n';
költség<<pr.második << ' n';

A kimenet:

d
lenni

az első és a második a pár két eleméhez fenntartott szavak. A pár értékei továbbra is módosíthatók az első és a második használatával.

A rendezetlen térkép témakörében egy párt hívnak, érték_típus.

unordered_map Elem hozzáférés

mapped_type & operator [] (key_type && k)
Visszaadja a megfelelő kulcs értékét. Példa:

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

umap['banán'] = 'sárga';
umap['szőlő'] = 'zöld';
umap['ábra'] = 'lila';

const char *jobb=umap['szőlő'];

költség<<jobb<<' n';

A kimenet: zöld. Az értékek azonos módon rendelhetők hozzá - lásd fent.

unordered_map Kapacitás

size_type size () const noexcept
Visszaadja a párok számát a térképen.

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

umap['banán'] = 'sárga';
umap['szőlő'] = 'zöld';
umap['ábra'] = 'lila';

költség<<umap.méret() <<' n';

A kimenet 3.

bool empty () const noexcept

1 értéket ad vissza, ha a térképnek nincs párja, és 0 -t hamisnak, ha párja van. Példa:

unordered_map<const char*, const char*>umap;
költség<<umap.üres() <<' n';

A kimenet 1.

Visszatérő iterátorok és a rendezetlen térképosztály

Az iterátor olyan, mint egy mutató, de több funkcióval rendelkezik, mint a mutató.

start () noexcept

Visszaad egy iterátort, amely a térképobjektum első párjára mutat, a következő kódszegmensben:

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

umap['banán'] = 'sárga';umap['szőlő'] = 'zöld';umap['ábra'] = 'lila';

unordered_map<const char*, const char*> ::iterátoriter=umap.kezdődik();
pár<const char*, const char*>pr= *iter;
költség<<pr.első << ',' <<pr.második << ' n';

A kimenet: füge, lila. A térkép nincs megrendelve.

begin () const noexcept;

Visszaad egy iterátort, amely a térképobjektum -gyűjtemény első elemére mutat. Ha az objektum konstrukcióját a const előzi meg, akkor a begin () const kifejezést hajtja végre a begin () helyett. Ilyen körülmények között az objektum elemei nem módosíthatók. Például a következő kódban használják.

constunordered_map<const char*, const char*>umap({{'banán', 'sárga'},
{'szőlő', 'zöld'}, {'ábra', 'lila'}});

unordered_map<const char*, const char*> ::const_iteratoriter=umap.kezdődik();
pár<const char*, const char*>pr= *iter;
költség<<pr.első << ',' <<pr.második << ' n';

A kimenet: füge, lila. A térkép nincs megrendelve. Ne feledje, hogy a const_iterator ezúttal az iterátor helyett a visszaadott iterátor fogadására szolgál.

end () noexcept

Egy iterátort ad vissza, amely közvetlenül a térképobjektum utolsó elemén túlmutat.

end () const noexcept

Egy iterátort ad vissza, amely közvetlenül a térképobjektum utolsó elemén túlmutat. Ha a térképobjektum -konstrukciót a const előzi meg, akkor az end () const kifejezés kerül végrehajtásra a end () helyett.

unordered_map Műveletek

iterátor keresés (const key_type & k)

A megadott kulcs párját keresi a térképen. Ha megtalálta, visszaadja az iterátort. Ha nem található, akkor a térkép végére mutató iterátort ad vissza, amely nem páros. A következő kód bemutatja ennek a tagfüggvénynek a használatát:

unordered_map<char,char>umap;

umap['nak nek'] = 'b';umap['c'] = 'd';umap['És'] = 'f';

unordered_map<char,char> ::iterátoriter=umap.megtalálja('c');
ha (umap.megtalálja('c') ! =umap.vége())
{
pár<char,char>pr= *iter;
költség<<pr.első << ',' <<pr.második << ' n';
}

A kimenet: c, d

const_iterator find (const key_type & k) const;

A függvény ezen verzióját hívjuk meg, ha a rendezetlen térkép létrehozása a const-val kezdődik, így a térkép minden eleme csak olvasható lesz.

unordered_map Modifiers

pár beillesztés (érték_típus && obj)
A rendezetlen térkép azt jelenti, hogy a párok nincsenek sorrendben. Tehát a program beilleszti a párt minden olyan helyre, amelyet kényelmesnek talál. A függvény visszatér, páros. Ha a beillesztés sikeres volt, akkor a bool értéke 1 lesz, ha igaz, ellenkező esetben 0. Ha a beillesztés sikeres, akkor az iterátor az újonnan beszúrt elemre mutat. Az alábbi kód szemlélteti a használatát:

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

umap['banán'] = 'sárga';
umap['szőlő'] = 'zöld';
umap['ábra'] = 'lila';

umap.betét({{'cseresznye', 'háló'}, {'eper', 'háló'}});

költség<<umap.méret() << ' n';

A kimenet: 5. Több pár is beilleszthető.

size_type törlés (const key_type & k)

Ez a funkció törli a párat az unordered_map -ből. A következő kódrészlet illusztrálja:

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

umap['banán'] = 'sárga';
umap['szőlő'] = 'zöld';
umap['ábra'] = 'lila';

intaz egyiken=umap.törli('szőlő');

költség<<umap.méret() << ' n';

A kimenet 2.
void swap (unordered_map &)
Két rendezetlen térkép cserélhető, amint ez a kódrészletben látható:

unordered_map<const char*, const char*>umap1= {{'banán', 'sárga'},
{'szőlő', 'zöld'}, {'ábra', 'lila'}, {'eper', 'háló'}};

unordered_map<const char*, const char*>umap2= {{'cseresznye', 'háló'}, {'mész', 'zöld'}};

umap1.csere(umap2);

unordered_map<const char*, const char*> ::iterátoriter1=umap1.kezdődik();
pár<const char*, const char*>pr1= *iter1;
unordered_map<const char*, const char*> ::iterátoriter2=umap2.kezdődik();
pár<const char*, const char*>pr2= *iter2;

költség<< 'Az első kulcs és az umap1 mérete:'<<pr1.első <<','<<umap1.méret() << ' n';
költség<< 'Az első kulcs és az umap2 mérete'<<pr2.első <<','<<umap2.méret() << ' n';
unordered_map<const char*, const char*>umap1= {{'banán', 'sárga'},
{'szőlő', 'zöld'}, {'ábra', 'lila'}, {'eper', 'háló'}};
unordered_map<const char*, const char*>umap2= {{'cseresznye', 'háló'}, {'mész', 'zöld'}};

umap1.csere(umap2);

unordered_map<const char*, const char*> ::iterátoriter1=umap1.kezdődik();
pár<const char*, const char*>pr1= *iter1;
unordered_map<const char*, const char*> ::iterátoriter2=umap2.kezdődik();
pár<const char*, const char*>pr2= *iter2;

költség<< 'Az első kulcs és az umap1 mérete:'<<pr1.első <<','<<umap1.méret() << ' n';
költség<< 'Az első kulcs és az umap2 mérete'<<pr2.első <<','<<umap2.méret() << ' n';

A kimenet:

Az első kulcs és az umap1 mérete: mész, 2

Az első kulcs és az umap2 eper mérete, 4

A térkép nincs megrendelve. Vegye figyelembe, hogy szükség esetén a térkép hossza megnő. Az adattípusoknak azonosnak kell lenniük.

Osztály és a hozzá tartozó objektumok

Az érték egy adattípushoz tartozik, mint a példányosított objektum az osztályhoz. A rendezetlen térképkonstrukció egy osztályt is elfogadhat adattípusként. Az alábbi program ezt szemlélteti:

#befoglalni
#befoglalni
névtér standard használatával;

osztály TheCla
{
nyilvános:
intaz egyiken;
statikus charch;

üresfunkció(charnem, const char *o)
{
költség<< 'Vannak ' <<az egyiken<< 'érdemes könyvek' <<nem<<o<< ' az áruházban.' << ' n';
}
statikus üresszórakoztató(charch)
{
ha (ch== 'nak nek')
költség<< „Hivatalos statikus tagfunkció” << ' n';
}
};

intfő-()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;

unordered_map<const char*,TheCla>umap;
umap= {{'banán',obj1}, {'szőlő',obj2}, {'ábra',obj3}, {'eper',obj4}, {'mész',obj5}};

költség<<umap.méret() << ' n';

Visszatérés 0;
}

A kimenet: 5.

Az osztálydefiníciónak két nyilvános adatadata és két nyilvános tagfüggvénye van. A main () függvényben az osztály különböző objektumai példányosulnak. Ezután rendezetlen térkép jelenik meg, ahol minden pár egy gyümölcs nevéből és egy tárgyból áll az osztályból. Megjelenik a térkép mérete. A program figyelmeztetés vagy hibaüzenet nélkül áll össze.

A térkép alkalmazása

A tömb indexet társít az értékhez. A kulcs/érték párok az élet számos helyzetében léteznek, amelyek programozhatók. A gyümölcs/szín kulcs/érték párja csak egy példa. Egy másik példa az emberek neve és kora. Ebben az esetben a pár típus, pár lesz. Páros is lehet. Ez utóbbi esetben az előfeldolgozási irányelvet kell alkalmazni. A kulcs/érték pár továbbra is a házaspárok neve lehet. Azokban az országokban, ahol többnejűség van, különböző feleségek lesznek egy férfi számára.

Térkép kialakítása

A térkép nem kétdimenziós tömb, két oszloppal. A térkép hash függvénnyel működik. A kulcsot a hash függvény kódolja egy tömb egész számába. Ez a tömb tartja az értékeket. Tehát valójában egy tömb van az értékekkel, és a kulcsok leképeződnek a tömb indexeire, és így létrejönnek a kulcsok és az értékek közötti megfelelések. A hashing kiterjedt téma, és ebben a cikkben nem foglalkozunk vele.

Következtetés

A térkép, más néven asszociatív tömb az elemek listája, ahol minden elem egy kulcs/érték pár. Tehát minden kulcs egy értéknek felel meg. A C ++ rendszerben a térképet adatszerkezetként valósítják meg tagfunkciókkal és operátorokkal. A rendezett térkép az, ahol az elempárokat kulcsok alapján rendezték el. A rendezetlen térkép az, ahol nincs megrendelés.

Technikailag a hash pár elemekből áll. Valójában a pár egy teljes adatstruktúra, tagfunkcióival és operátoraival. A párhoz tartozó két sablonparaméter ugyanaz a két sablonparaméter a rendezetlen_térképhez.

A térkép inicializáló_listája a literálok tömb literalja. Minden belső literál két objektumból, a kulcs/érték párból áll.

Az unordered_map tagfunkcióit és operátorait a következő címek alá lehet sorolni: unordered_map construction/copy konstring, unordered_map Capacity, unordered_map iterator, unordered_map Operations és unordered_map Modifiers.

Rendetlen térképet használnak, ha a kulcsot értékre kell leképezni.

Chrys