C ++

Egyedi és megrendelt konténerek C ++ nyelven

Egyedi és megrendelt konténerek C ++ nyelven
6, 10, 2, 8, 4 egy halmaz; A 2, 4, 6, 8, 10 ugyanazon egész számok halmaza növekvő sorrendben. A matematikában egy halmaz egyedi elemekkel (különálló elemekkel) rendelkezik, vagyis egyetlen elem sem fordul elő többször. Ezenkívül a multiset egy halmaz, ahol bármely elem többször előfordulhat. 6, 6, 10, 2, 2, 8, 4, 4, 4 egy multiset. 2, 2, 4, 4, 4, 6, 6, 8, 10 ugyanaz a többszörös, de az elemek növekvő sorrendben vannak elrendezve. Ez a cikk nem foglalkozik a multisetekkel. A set, úgynevezett C ++ adatstruktúrával foglalkozik.

A szoftveres térkép olyan, mint egy tömb, de egy tömb, amelyben egy oszlop helyett két oszlop található. Az első oszlopban vannak kulcsok, a másodikban pedig az értékek. Minden sor egy pár, ami egy kulcs / érték pár. A kulcs közvetlenül kapcsolódik az értékéhez.

A térképre példa: 'c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10. Az első ide beillesztett kulcs / érték pár: 'c', 3, ahol 'c' a kulcs és 30 az érték. Ezt a térképet nem kulcsok rendezik. A térkép kulcsokkal történő rendezése 'a', 10, 'b', 20, 'c', 30, 'd', 30, 'e', 40. Figyelje meg, hogy lehetnek duplikált értékek, de nem duplikált kulcsok. A rendezett térkép kulcsokkal rendezett térkép.

A multiset egy halmaz, mint a multimap egy térkép. Ez azt jelenti, hogy vannak térképek duplikált kulcsokkal. A multimapra példa: 'a', 10, 'b', 20, 'b', 20, 'c', 30, 'c', 30, 'd ', 30, ' e ', 40. És mint fentebb említettük, ez a cikk nem foglalkozik a multimap-tal, inkább a C ++ adatstruktúrával,.

A C ++ nyelven az adatstruktúra egy tulajdonságokkal (adat tagok) és módszerekkel (tag függvények) rendelkező struktúra. A szerkezet adatai egy lista; egy halmaz egy lista; a térkép a kulcs / érték párok listája.

Ez a cikk a halmazok és térképek alapjait tárgyalja a C ++ nyelven, és a cikk jobb megértése érdekében az olvasónak alapvető ismeretekkel kellett volna rendelkeznie a C ++ nyelven++.

A cikk tartalma:

Osztály és tárgyai:

A C ++ - ban a halmazt, a térképet és más hasonló struktúrákat konténereknek nevezzük. Az osztály egy általánosított egység, amelynek tagjai adattagok, amelyek változók, és tagfunkciók, amelyek összefüggenek. Amikor az adattagok értékeket kapnak, akkor egy objektum jön létre. Az objektum azonban az úgynevezett példányosítás során képződik. Mivel egy osztály különböző értékekhez vezethet ugyanazon adattag-változóknál, akkor különböző objektumok példányosíthatók ugyanabból az osztályból.

A C ++ nyelven a használhatatlan halmaz egy osztály, valamint egy használhatatlan térkép. Amikor egy objektumot a használhatatlan halmazból vagy a használhatatlan térképből példányosítanak, az objektum válik a valódi adatstruktúrává. A halmaz- és térképadat-struktúrákkal a fő adattag egy lista. Nos, a halmaz és a térkép egy csoportot alkot az úgynevezett, rendezett asszociatív konténerekből. Rendezetlen halmaz és rendezetlen térkép is létezik, de ezekkel a cikkekkel sajnos nem foglalkozunk.

Készlet vagy térkép létrehozása:

Egy halmaznak a halmaz osztályából történő létrehozása halmaz létrehozása; egy térkép megjelenítése a térkép osztályából létrehoz egy térképet. Az így létrehozott objektum a programozó által választott nevet kapja.

Készlet létrehozása érdekében a programnak a következőkkel kell kezdődnie:

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

Vegye figyelembe a „#include ”, Amely magában foglalja azt a készlet könyvtárat, amely rendelkezik azzal a halmaz osztállyal, amelyből a halmaz adatstruktúrái példányosak lesznek.

Térkép létrehozása érdekében a programnak a következőkkel kell kezdődnie:

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

Vegye figyelembe a „#include ”, Amely magában foglalja azt a térképkönyvtárat, amely rendelkezik azzal a térképosztályral, amelyből a térképi adatstruktúrák instantizálódnak.

Az üres halmaz létrehozásának szintaxisa:

készlet objectName

Példa:

készlet setObj;

Példa tartalomkészlet létrehozására:

készlet setObj (6, 10, 2, 8, 4);

Az üres térkép létrehozásának szintaxisa:

térkép objectName

Példa:

térkép mapObj;

Példa tartalommal rendelkező térkép létrehozására:

térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);

Iterátor alapjai:

Az iterátor egy kidolgozott mutató, amellyel az adatstruktúra listáját az elejétől a végéig lehet haladni.

A kezdő () tag Funkció

A begin () tag függvény egy iterátort ad vissza, amely a lista első elemére mutat. A következő példa ezt szemlélteti a készlet esetében:

készlet setObj (6, 10, 2, 8, 4);
készlet:: iterátor iter = setObj.kezdődik();
cout << *iter << '\n';

Ne feledje, hogy a begin () módot a setObj és a dot operátor esetében használták. az iter a visszatérő iterátor objektum. Vegye figyelembe a deklarálás módját is. * az indirection operátor. Az iter használatakor a halmaz első elemét adja vissza; az első elem 6 helyett 2 - lásd az alábbi magyarázatot.

Az alábbi példa bemutatja a begin () függvény használatát a térképhez:

térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
térkép:: iterátor iter = térképObj.kezdődik();
cout << "" << (*iter).first <<',' << (*iter).second << "\n";

Ne feledje, hogy a mapObj és a dot operátor esetében a begin () módot használták. az iter a visszaadott iterátor objektum. Vegye figyelembe a deklarálás módját is. Az „első” itt használt kulcsra utal. A „második” a kulcsnak megfelelő értékre utal. Figyelje meg, hogyan használták őket az iterrel a lista kezdőelem-összetevőinek megszerzéséhez. Az első elem a c, 30 helyett a a, 10 - lásd az alábbi magyarázatot.

A „begin () const” tag függvény

A „begin () const” tagfüggvény egy iterátort ad vissza, amely a lista első elemére mutat, amikor a halmaz deklarációja konstanssal kezdődik (konstansra). Ilyen feltétel mellett az iterátor nem tudja megváltoztatni a listában szereplő, a visszaadott iterátor által hivatkozott értéket. A következő példa szemlélteti a készlet használatát:

const beállítva setObj (6, 10, 2, 8, 4);
készlet:: const_iterator iter = setObj.kezdődik();
cout << *iter << '\n';

Vegye figyelembe, hogy a begin () módot a setObj és a dot operátor esetében használták. A kezdet () után nem lett beírva „const”. A nyilatkozatot azonban megelőzte a „const”. Az iter itt a visszatérő állandó iterátor objektum, amely eltér a normál iterátortól. Vegye figyelembe a deklarálás módját is. * az indirection operátor; az iter használatakor a halmaz első elemét adja vissza. Az első elem 6 helyett 2 - lásd az alábbi magyarázatot.

Az alábbi példa bemutatja a „begin () const” függvény használatát a térképen:

const térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
térkép:: const_iterator iter = mapObj.kezdődik();
cout << "" << (*iter).first <<',' << (*iter).second << "\n";

Ne feledje, hogy a mapObj és a dot operátor esetében a begin () módot használták. A kezdet () után nem írt be „const”. A nyilatkozatot azonban megelőzte a „const”. Az iter itt a visszatérő állandó iterátor objektum, amely eltér a normál iterátortól. Vegye figyelembe a deklarálás módját is. Az „első” itt használt kulcsra utal; A „második” itt használt kifejezés a kulcsnak megfelelő értékre utal. Figyelje meg, hogyan használták őket az iterrel a lista kezdő elemének megszerzéséhez. Az első elem a c, 30 helyett a a, 10 - lásd az alábbi magyarázatot.

A vég () tag Funkció

A end () tag függvény egy iterátort ad vissza, amely közvetlenül a lista vége után mutat. A következő példa ezt szemlélteti a készlet esetében:

készlet setObj (6, 10, 2, 8, 4);
készlet:: iterátor iter = setObj.vége ();
cout << *iter << '\n';

Ne feledje, hogy az end () módot a setObj és a dot operátorral együtt használták. az iter a visszaadott iterátor objektum. Vegye figyelembe a deklarálás módját is. * az indirection operátor; az iter használatakor a halmaz utolsó + 1 elemét adja vissza. A szerző számítógépén ez az utolsó + 1 elem 5, amely nincs a listán. Ezért vigyázzon, hogy ne használja ezt az elemet.

Az alábbi példa bemutatja az end () függvény használatát a térképhez:

térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
térkép:: iterátor iter = térképObj.vége ();
cout << "" << (*iter).first <<',' << (*iter).second << "\n";

Ne feledje, hogy az end () módját a mapObj és a dot operátorral együtt használták. az iter a visszatérő iterátor objektum. Vegye figyelembe a deklarálás módját is. * az indirection operátor; az iter használatakor a térkép utolsó + 1 elemét adja vissza. A szerző számítógépén ez az utolsó + 1 elem a , 0, amely nincs a listán. Ezért vigyázzon, hogy ne használja ezt az elemet.

A „end () const” tag függvény

A „end () const” tagfüggvény egy olyan iterátort ad vissza, amely közvetlenül a lista vége után mutat, amikor a halmaz deklarációja konst (konstansra) kezdődik. Ilyen feltétel mellett az iterátor nem tudja megváltoztatni a listában szereplő, a visszaadott iterátor által hivatkozott értéket. A következő példa szemlélteti a készlet használatát:

const beállítva setObj (6, 10, 2, 8, 4);
készlet:: const_iterator iter = setObj.vége ();
cout << *iter << '\n';

Ne feledje, hogy az end () módot a setObj és a dot operátorral együtt használták. A vége után nem írt be „const” (). A nyilatkozatot azonban megelőzte a „const”. az iter a visszatérő iterátor objektum. Vegye figyelembe a deklarálás módját is. * az indirection operátor; az iter használatakor a halmaz utolsó + 1 elemét adja vissza.

A következő példa bemutatja az „end () const” függvény használatát a térképen:

const térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
térkép:: const_iterator iter = mapObj.vége ();
cout << "" << (*iter).first <<',' << (*iter).second << "\n";

Ne feledje, hogy az end () módját a mapObj és a dot operátorral együtt használták. A vége után nem írt be „const” (). A nyilatkozatot azonban megelőzte a „const”. az iter a visszatérő állandó iterátor objektum, amely különbözik a normál iterátortól. Figyelje meg alaposan a nyilatkozat módját is.

Elem hozzáférés készlethez és térképhez:

Készlet

A halmaznál az elem beolvasása a indirection operátor segítségével történik. A halmaz első két elemét a következő példa olvassa el:

készlet setObj (6, 10, 2, 8, 4);
készlet:: iterátor iter = setObj.kezdődik();
cout << *iter << '\n';
++iter;
cout << *iter << '\n';

A kimenet 2, majd 4 következik - lásd az alábbi magyarázatot. A lista következő elemére való mutatáshoz az iterátor növekszik.

Megjegyzés: Egy elem nem módosítható a készlet indirection operátorával. Például: „* iter = 9;” nem lehetséges.

térkép

A térkép kulcs / érték párokból áll. Az érték a megfelelő kulccsal olvasható, és ugyanazzal a gombbal módosítható. A következő kódszegmens ezt szemlélteti:

térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
cout << mapObj['b'] << '\n';
mapObj ['b'] = 55;
cout << mapObj['b'] << '\n';

A kimenet:

20
55

A dot operátort itt nem használták. Ehelyett a szögletes zárójelben szereplő operátort használják, amely tartalomként veszi a kulcsot.

Elemek sorrendje készletben vagy térképen:

Az elemek beilleszthetők egy halmazba, bármilyen sorrendben. A készlet azonban, miután beillesztette, növekvő sorrendben rendezi át elemeit. A növekvő sorrend az alapértelmezett sorrend. Ha csökkenő sorrendre van szükség, akkor a halmazt a következő példában kell deklarálni:

készlet > setObj (6, 10, 2, 8, 4);

Tehát a típus után pl.g., int, a sablonhoz vessző van, majd a “nagyobb”A szögletes zárójelben.

Az elemek tetszőleges sorrendben beilleszthetők a térképbe. Ha azonban beillesztette, a térkép elemeit növekvő sorrendbe rendezi kulcsok szerint (csak), miközben megőrzi az egyes kulcsok és az értékek közötti kapcsolatot. A növekvő sorrend az alapértelmezett sorrend; ha csökkenő sorrendre van szükség, akkor a térképet a következő példa szerint kell deklarálni:

térkép > mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);

Tehát a típuspár után pl.g., „Char, int”, a sablonhoz vessző van, majd a “nagyobb”A szögletes zárójelben.

Egy készlet haladása

Az iterátorral ellátott while-loop vagy for-loop segítségével haladhatunk egy halmazon. A következő példa egy for-loop segítségével halad át egy halmazban, amely csökkenő sorrendben van konfigurálva:

készlet > setObj (6, 10, 2, 8, 4);
mert (set:: iterátor iter = setObj.kezdődik(); iter != setObj.vége (); ++ iter)

cout << *iter << ";

A kimenet:

10 8 6 4 2

Az iterátor növelése a következő elemre mutat.

Térkép bejárása

Az iterátorral ellátott while-loop vagy for-loop segítségével térképet lehet bejárni. A következő példa egy for-loop segítségével halad át egy olyan térképen, amelyet csökkenő sorrendben konfiguráltak:

térkép > mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
for (térkép:: iterátor iter = térképObj.kezdődik(); iter != mapObj.vége (); ++ iter)

cout << "" << (*iter).first << ", " << (*iter).second << "" << ", ";

A kimenet:

e, 40, d, 30, c, 30, b, 20, a, 10,

Az iterátor növelése a következő elemre mutat. Az „első” a kódban a kulcsra, a „második” pedig a megfelelő értékre utal. Vegye figyelembe, hogy ezek az értékek hogyan kerültek elő a kimenetre.

Egyéb gyakran használt tagfunkciók:

A méret () Funkció

Ez a függvény egy egész számot ad vissza, ami a lista elemeinek száma. Példa:

készlet > setObj (6, 10, 2, 8, 4);
cout << setObj.size() << '\n';

A kimenet 5.

Térkép példa:

térkép > mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
cout << mapObj.size() << '\n';

A kimenet 5.

Az insert () függvény

készlet

A set nem engedélyezi az ismétlést. Tehát minden beillesztett másolatot csendben elutasítunk. A halmaznál az insert () függvény argumentuma a beillesztendő érték. Az értéket olyan helyzetbe illesztik, amelyben a halmaz sorrendje növekvő vagy csökkenő marad. Példa:

készlet setObj (6, 10, 2, 8, 4);
setObj.betét (6);
setObj.betét (9);
setObj.betét (12);
mert (set:: iterátor iter = setObj.kezdődik(); iter != setObj.vége (); ++ iter)

cout << *iter << ";

A kimenet:

2 4 6 8 9 10 12

Megjegyzés: Az insert () tag függvény felhasználható egy üres halmaz feltöltésére.

térkép

A térkép nem engedélyezi a kulcsonkénti másolást. Tehát minden beillesztett másolatot csendben elutasítunk. A térképen az insert () függvény argumentuma a zárójelben szereplő kulcs / érték pár. Az elemet kulccsal illesztik egy pozícióba, amelyben a térkép sorrendje növekvő vagy csökkenő marad. Példa:

térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
mapObj.beillesztés ('e', 80);
mapObj.beszúrás ('f', 50);
mapObj.beszúrás ('g', 60);
for (térkép:: iterátor iter = térképObj.kezdődik(); iter != mapObj.vége (); ++ iter)
cout << "" << (*iter).first << ", " << (*iter).second << "" << ", ";

A kimenet:

a, 10, b, 20, c, 30, d, 30, e, 40, f, 50, g, 60,

Megjegyzés: Az insert () tag függvény használható egy üres térkép kitöltésére.

Az üres () függvény

Ez a függvény true-val tér vissza, ha a lista üres, és hamis, ha másként. Példa:

készlet setObj (6, 10, 2, 8, 4);
bool ret = setObj.üres();
cout << ret << '\n';

A kimenet 0 értéke hamis, vagyis az itt megadott halmaz nem üres.

Térkép példa:

térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
bool ret = mapObj.üres();
cout << ret << '\n';

A kimenet 0 értéke hamis, vagyis a térkép itt nem üres.

Az erase () funkció

készlet

Vegye figyelembe a következő kódszegmenst:

készlet setObj (10, 20, 30, 40, 50);
készlet:: iterátor iter = setObj.kezdődik();
készlet:: iterátor itr = setObj.törlés (iter);
cout << "new size: " << setObj.size() << '\n';
cout << "next value: " << *itr << '\n';
itr = setObj.törlés (itr);
cout << "new size: " << setObj.size() << '\n';
cout << "next value: " << *itr << '\n';

A kimenet:

új méret: 4
következő érték: 20
új méret: 3
következő érték: 30

Az erase () függvény egy iterátort vesz igénybe, amely argumentumként egy elemre mutat. Az elem törlése után az erase () függvény visszaad egy iterátort, amely a következő elemre mutat.

térkép

Vegye figyelembe a következő kódszegmenst:

térkép mapObj ('a', 10, 'b', 20, 'c', 30, 'd', 40, 'e', 50);
térkép:: iterátor iter = térképObj.kezdődik();
térkép:: iterátor itr = mapObj.törlés (iter);
cout << "new size: " << mapObj.size() << '\n';
cout << "next value pair: " << (*itr).first <<',' << (*itr).second << "\n";
itr = mapObj.törlés (itr);
cout << "new size: " << mapObj.size() << '\n';
cout << "next value pair: " << (*itr).first <<',' << (*itr).second << "\n";

A kimenet:

új méret: 4
következő értékpár: b, 20
új méret: 3
következő értékpár: c, 30

Az erase () függvény egy iterátort vesz fel, amely argumentumként egy elemre mutat. Az elem törlése után az erase () függvény visszaad egy iterátort, amely a következő elemre mutat.

A clear () függvény

A clear () függvény eltávolítja a lista összes elemét. Példa:

készlet setObj (6, 10, 2, 8, 4);
setObj.egyértelmű();
cout << setObj.size() << '\n';

A kimenet 0.

térkép példa:

térkép mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
mapObj.egyértelmű();
cout << mapObj.size() << '\n';

A kimenet 0.

Következtetés:

A C ++ formátumban meghatározott adatstruktúra egy olyan struktúra, amelyben az elemek listáját alapértelmezés szerint növekvő sorrendben, vagy a programozó választása szerint csökkenő sorrendben tároljuk. A készlet minden eleme egyedi. A C ++ térképadat-struktúra olyan struktúra, amelyben a lista kulcs / érték pár hash, alapértelmezés szerint a kulcsok növekvő sorrendjében, vagy a programozó választása szerint csökkenő sorrendben tárolva. A kulcsok szintén egyediek, és lehetnek duplikált értékek. Az egyik struktúra fő adattagja a lista. Bármelyik struktúrának tagfüggvényei vannak, amelyek közül néhányat általában használnak.

Microsoft Sculpt Touch vezeték nélküli egér áttekintés
Nemrég olvastam a Microsoft Sculpt Touch vezeték nélküli egér és úgy döntött, hogy megveszi. Egy ideig használat után úgy döntöttem, hogy megosztom ve...
AppyMouse képernyős Trackpad és egérmutató a Windows táblagépekhez
A táblagép-felhasználók gyakran hiányolják az egérmutatót, különösen akkor, ha szokták használni a laptopokat. Az érintőképernyős okostelefonok és táb...
Az egér középső gombja nem működik a Windows 10 rendszerben
A középső egérgomb segít átgörgetni a hosszú weboldalakat és a sok adatot tartalmazó képernyőket. Ha ez leáll, akkor a billentyűzet segítségével görge...