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:
{'szőlő', 'zöld'}, {'ábra', 'lila'}});
Építés az Initializer_list hozzárendelésével
Példa:
{'szőlő', 'zöld'}, {'ábra', 'lila'}};
Építés más rendetlen_térkép másolásával
Példa:
{'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:
dlenni
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:
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.
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:
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ó:
{'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