C ++

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

A C ++ rendezetlen térkép használata
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 megfelel egy értéknek. Különböző kulcsok ugyanazzal az értékkel lehetnek, a hétköznapi munkához. Például a kulcsok lehetnek gyümölcsök listája és a hozzájuk tartozó értékek, a gyümölcsök színei. A C ++ - ban a térkép adatstruktúraként valósul meg tagfunkciókkal és operátorokkal. A rendezett térkép az, ahol az elempárokat kulcsokkal rendezték. A rendezetlen térkép az, ahol nincs rend. Ez a cikk elmagyarázza a C ++ rendezetlen térkép használatát, rendezetlen_térképként írva. A cikk megértéséhez ismeretekre van szüksége a C ++ mutatókban. az unordered_map a C ++ szabványos könyvtár része.

Osztály és objektumok

Az osztály olyan változók és függvények együttese, amelyek együttesen működnek, ahol a változókhoz nincs hozzárendelve érték. Ha a változókhoz értékeket rendelünk, az osztály objektummá válik. Ugyanazon osztálynak adott különböző értékek különböző objektumokat eredményeznek; vagyis a különböző objektumok azonos osztályba tartoznak, különböző értékekkel. Egy objektum osztályból történő létrehozása állítólag az objektumot példányosítja.

A név, rendezetlen_térkép osztály. Az unordered_map osztályból létrehozott objektumnak programozó választott neve van.

Egy osztályhoz tartozó függvényre van szükség egy objektum példányosításához az osztályból. A C ++ nyelven ennek a függvénynek ugyanaz a neve, mint az osztály nevének. Az osztályból létrehozott (példányosított) objektumok különböző neveket kaptak a programozótól.

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

Az unordered_map osztályt használó C ++ program a fájl tetején a következő sorokkal kezdődik:

#include
#include
névtér használata std;

Az első sor a bemenetre / kimenetre vonatkozik. A második sor lehetővé teszi a program számára az unordered_map osztály összes funkciójának használatát. A harmadik sor lehetővé teszi a program számára a nevek használatát a szokásos névtérben.

Funkció túlterhelése

Ha két vagy több különböző funkció aláírásnak ugyanaz a neve, akkor azt mondják, hogy 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ényt hajtják végre.

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

Egyszerű konstrukció

Rendezetlen térkép az alábbiak szerint készíthető és rendelhető hozzá értékekhez:

rendezetlen_térkép umap;
umap ["banán"] = "sárga";
umap ["szőlő"] = "zöld";
umap ["fig"] = "lila";

A deklaráció a sablon-specializációval kezdődik, a kulcs- és értékpárok típusaival. Ezt követi a programozó által kiválasztott név a térképhez; majd pontosvessző. A második kódszegmens megmutatja, hogyan lehet értékeket rendelni a kulcsaikhoz.
Az Initializer_list szerkesztése
Ez a következőképpen tehető meg:

rendezetlen_térkép umap ("banán", "sárga",
"szőlő", "zöld", "ábra", "lila");

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

rendezetlen_térkép umap = "banán", "sárga",
"szőlő", "zöld", "ábra", "lila";

Építés egy másik rendezetlen_térkép másolásával
Példa:

rendezetlen_térkép umap1 ("banán", "sárga",
"szőlő", "zöld", "ábra", "lila");
rendezetlen_térkép umap2 (umap1);

A pár Elem

Az alábbi kód bemutatja, hogyan hozható létre és hogyan érhető el a pár elem:

pár pr = 'd', "tenger";
cout << pr.first << '\n';
cout << pr.second << '\n';

A kimenet:

d
tenger

az első és a második a pár két elemének van fenntartva. A párban lévő értékek továbbra is megváltoztathatók az első és a második használatával.

A rendezetlen térkép témakörében pár nevet kap, value_type.

unordered_map Elemi hozzáférés

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

rendezetlen_térkép umap;
umap ["banán"] = "sárga";
umap ["szőlő"] = "zöld";
umap ["fig"] = "lila";
const char * ret = umap ["szőlő"];
cout << ret <<'\n';

A kimenet: „zöld”. Az értékeket ugyanúgy lehet hozzárendelni - lásd fent.

rendezetlen_térkép Kapacitás

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

rendezetlen_térkép umap;
umap ["banán"] = "sárga";
umap ["szőlő"] = "zöld";
umap ["fig"] = "lila";
cout << umap.size() <<'\n';

A kimenet 3.

bool üres () const noexcept

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

rendezetlen_térkép umap;
cout << umap.empty() <<'\n';

A kimenet 1.

Visszatérő iterátorok és a rendezetlen térképű osztály

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

kezdődik () noexcept

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

rendezetlen_térkép umap;
umap ["banán"] = "sárga"; umap ["szőlő"] = "zöld"; umap ["fig"] = "lila";
rendezetlen_térkép:: iterátor iter = umap.kezdődik();
pár pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

A kimenet: ábra, lila. A térkép rendezetlen.

begin () const noexcept;

Visszaad egy iterátort, amely a térképobjektum-gyűjtemény első elemére mutat. Amikor az objektum felépítését const előzi meg, a „begin () const” kifejezés kerül végrehajtásra a „begin ()” helyett. Ilyen feltétel mellett az objektum elemei nem módosíthatók. Például a következő kódban használják.

const rendezetlen_térkép umap ("banán", "sárga",
"szőlő", "zöld", "ábra", "lila");
rendezetlen_térkép:: const_iterator iter = umap.kezdődik();
pár pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

A kimenet: ábra, lila. A térkép rendezetlen. Vegye figyelembe, hogy a visszatérő iterátor fogadására ezúttal a const_iterator-t használták az iterátor helyett.

end () noexcept

Visszaad egy iterátort, amely közvetlenül a térképobjektum utolsó eleme fölé mutat.

end () const noexcept

Visszaad egy iterátort, amely közvetlenül a térképobjektum utolsó eleme fölé mutat. Ha a térképobjektum-konstrukciót megelőzi az const, akkor a „end () const” kifejezés kerül végrehajtásra.

unordered_map műveletek

iterátor keresés (const kulcs_típus és k)

Megkeresi az adott kulcs párját a térképen. Ha megtalálta, akkor visszaadja az iterátort. Ha nem található, akkor a térkép végére mutató iterátort ad vissza, amely nem pár. A következő kód megmutatja, hogyan kell használni ezt a tagfüggvényt:

rendezetlen_térkép umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
rendezetlen_térkép:: iterátor iter = umap.megtalálni ('c');
ha (umap.megtalálás ('c') != umap.vége ())

pár pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

A kimenet: c, d

const_iterator keresés (const kulcs_típusa & k) const;

A függvénynek ezt a verzióját hívjuk meg, ha a rendezetlen térkép létrehozása konst-el kezdődik, így a térkép összes eleme csak olvashatóvá válik.

unordered_map módosítók

pár beillesztés (value_type && obj)
A rendezetlen térkép azt jelenti, hogy a párok nincsenek sorrendben. Tehát a program beilleszti a párosítást bármely olyan helyre, amelyet kényelmesnek talál. A függvény visszatér, párosít. Ha a beillesztés sikeres volt, akkor a bool értéke 1 lesz a true értékre, különben 0 a hamis értékre. Ha a beillesztés sikeres, akkor az iterátor az újonnan beillesztett elemre mutat. A következő kód szemlélteti a felhasználást:

rendezetlen_térkép umap;
umap ["banán"] = "sárga";
umap ["szőlő"] = "zöld";
umap ["fig"] = "lila";
umap.betét ("cseresznye", "piros", "eper", "piros");
cout << umap.size() << '\n';

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

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

Ez a függvény töröl egy párot a rendezetlen_térképből. A következő kódszegmens szemlélteti:

rendezetlen_térkép umap;
umap ["banán"] = "sárga";
umap ["szőlő"] = "zöld";
umap ["fig"] = "lila";
int num = umap.törlés ("szőlő");
cout << umap.size() << '\n';

A kimenet 2.
void swap (rendezetlen_térkép &)
Két rendezetlen térkép felcserélhető, amint ezt a kódszegmens mutatja:

rendezetlen_térkép umap1 = "banán", "sárga",
"szőlő", "zöld", "füge", "lila", "eper", "piros";
rendezetlen_térkép umap2 = "cseresznye", "piros", "mész", "zöld";
umap1.csere (umap2);
rendezetlen_térkép:: iterátor iter1 = umap1.kezdődik();
pár pr1 = * iter1;
rendezetlen_térkép:: iterátor iter2 = umap2.kezdődik();
pár 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';
rendezetlen_térkép umap1 = "banán", "sárga",
"szőlő", "zöld", "füge", "lila", "eper", "piros";
rendezetlen_térkép umap2 = "cseresznye", "piros", "mész", "zöld";
umap1.csere (umap2);
rendezetlen_térkép:: iterátor iter1 = umap1.kezdődik();
pár pr1 = * iter1;
rendezetlen_térkép:: iterátor iter2 = umap2.kezdődik();
pár 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';

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 rendezetlen. Vegye figyelembe, hogy a térkép hossza szükség esetén megnövekszik. Az adattípusoknak azonosaknak kell lenniük.

Osztály és azonnali tárgyai

Az érték egy adattípusra vonatkozik, mint a példányosított objektum egy osztályra. A rendezetlen térképszerkezet egy osztályt is elfogadhat adattípusként. A következő program ezt szemlélteti:

#include
#include
névtér használata std;
osztály TheCla

nyilvános:
int szám;
statikus char ch;
void func (char cha, const char * str)

cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

statikus üresség (char ch)

ha (ch == 'a')
cout << "Official static member function" << '\n';

;
int main ()

TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
rendezetlen_térkép umap;
umap = "banán", obj1, "szőlő", obj2, "ábra", obj3, "eper", obj4, "mész", obj5;
cout << umap.size() << '\n';
visszatér 0;

A kimenet: 5.

Az osztálydefiníciónak két adat nyilvános tagja és két nyilvános tag funkciója van. A main () függvényben az osztály különböző objektumait példányosítják. Ezután egy rendezetlen térképet példányosítanak, ahol minden pár egy gyümölcs nevéből és egy osztályból származó tárgyból áll. Megjelenik a térkép mérete. A program figyelmeztetés vagy hibaüzenet nélkül állít össze.

A Térkép alkalmazása

A tömb indexet társít az értékhez. Az élet számos helyzetében léteznek kulcs / érték párok, amelyek programozhatók. A gyümölcs / szín kulcs / érték pár 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ár is lehet. Ez utóbbi esetben az előfeldolgozásról szóló irányelvet kell alkalmazni. Kulcs / érték pár továbbra is a házaspárok neve lehet. Azokban az országokban, ahol többnejűség van, egy férfinak különböző feleségei lesznek.

Térkép kialakítása

A térkép nem kétdimenziós tömb, két oszloppal rendelkezik. A térkép hash funkcióval működik. A kulcsot a hash függvény kódolja egy tömb egész számává. Ez a tömb tartja az értékeket. Tehát valójában egy tömb van az értékekkel, és a kulcsok a tömb indexeihez vannak hozzárendelve, és így a kulcsok és az értékek megfelelnek. A hashing kiterjedt téma, és ez a cikk nem foglalkozik 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 megfelel egy értéknek. A C ++ - ban a térkép adatstruktúraként valósul meg tagfunkciókkal és operátorokkal. A rendezett térkép az, ahol az elempárokat kulcsokkal rendezték. A rendezetlen térkép az, ahol nincs sorrend.

Technikailag a hash párból áll elemek. Valójában a pár egy egész adatstruktúra tagfunkcióival és operátorokkal. A pár két sablonparamétere ugyanaz az sablonparaméter az unordered_map számára.

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

Az unordered_map tagfüggvényei és operátorai a következő címsorokba sorolhatók: unordered_map konstrukció / másolat készítés, unordered_map kapacitás, unordered_map iterátor, unordered_map műveletek és unordered_map módosítók.

Rendezetlen térképet használunk, ha egy kulcsot egy értékhez kell hozzárendelni.

Chrys

A legjobb Gamepad Mapping alkalmazások Linuxhoz
Ha egy tipikus billentyűzet és egér beviteli rendszer helyett szeretnél játékokat játszani Linuxon egy játékvezérlővel, van néhány hasznos alkalmazás ...
Hasznos eszközök Linux játékosok számára
Ha szeretsz Linuxon játszani, akkor valószínű, hogy olyan alkalmazásokat és segédprogramokat használtál, mint a Wine, a Lutris és az OBS Studio a játé...
HD Remastered Games for Linux, amelyeknek soha nem volt korábban Linux kiadásuk
Számos játékfejlesztő és kiadó a régi játékok HD remasterjével áll elő a franchise élettartamának meghosszabbítása érdekében. Kérjük, hogy a rajongók ...