C ++

Jak používat neuspořádanou mapu C ++

Jak používat neuspořádanou mapu C ++
Mapa, známá také jako asociativní pole, je seznam prvků, kde každý prvek je pár klíč / hodnota. Každý klíč tedy odpovídá hodnotě. Různé klíče mohou mít pro běžnou práci stejnou hodnotu. Klíčem může být například seznam ovoce a odpovídající hodnoty, barvy ovoce. V C ++ je mapa implementována jako datová struktura s členskými funkcemi a operátory. Uspořádaná mapa je ta, kde byly páry prvků seřazeny pomocí klíčů. Neuspořádaná mapa je ta, kde není žádný řád. Tento článek vysvětluje, jak používat neuspořádanou mapu C ++, zapsanou jako unordered_map. Abyste pochopili tento článek, potřebujete znalosti v ukazatelích C ++. unordered_map je součástí standardní knihovny C ++.

Třída a objekty

Třída je sada proměnných a funkcí, které pracují společně, kde proměnné nemají přiřazené hodnoty. Když jsou proměnným přiřazeny hodnoty, třída se stane objektem. Různé hodnoty dané stejné třídě vedou k různým objektům; to znamená, že různé objekty jsou stejné třídy s různými hodnotami. Vytváření objektu z třídy se říká, že vytváří instanci objektu.

Název unordered_map je třída. Objekt vytvořený ze třídy unordered_map má programátorem zvolený název.

Funkce, která patří do třídy, je nutná k vytvoření instance objektu z třídy. V C ++ má tato funkce stejný název jako název třídy. Objekty vytvořené (instancované) ze třídy mají programátorům pojmenovaná různá jména.

Vytvoření objektu z třídy znamená konstrukci objektu; to také znamená instanci.

Program C ++, který používá třídu unordered_map, začíná následujícími řádky v horní části souboru:

#zahrnout
#zahrnout
pomocí jmenného prostoru std;

První řádek je pro vstup / výstup. Druhým řádkem je umožnit programu využívat všechny funkce třídy unordered_map. Třetí řádek umožňuje programu používat názvy ve standardním jmenném prostoru.

Přetížení funkce

Když mají dva nebo více různých podpisů funkcí stejný název, říká se, že je přetížený. Když je volána jedna funkce, počet a typ argumentů určuje, která funkce je skutečně provedena.

Konstrukce / kopírování konstrukce

Jednoduchá konstrukce

Neuspořádanou mapu lze sestavit a přiřadit hodnoty následujícím způsobem:

unordered_map umap;
umap ["banana"] = "žlutá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";

Deklarace začíná specializací šablony s typy pro páry klíč a hodnota. Poté následuje programátorem zvolený název mapy; pak středník. Druhý segment kódu ukazuje, jak přiřadit hodnoty jejich klíčům.
Stavba podle Initializer_list
To lze provést následovně:

unordered_map umap ("" banana "," yellow ",
"grape", "green", "fig", "purple");

Stavba přiřazením Initializer_list
Příklad:

unordered_map umap = "banana", "yellow",
"grape", "green", "fig", "purple";

Konstrukce kopírováním další unordered_map
Příklad:

unordered_map umap1 ("" banán "," žlutá ",
"grape", "green", "fig", "purple");
unordered_map umap2 (umap1);

Dvojice Živel

Následující kód ukazuje, jak vytvořit a získat přístup k prvku páru:

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

Výstupem je:

d
moře

první a druhé jsou vyhrazená slova pro dvě položky v páru. Hodnoty v páru lze stále měnit pomocí prvního a druhého.

V tématu neuspořádané mapy se nazývá dvojice value_type.

unordered_map Element Access

mapped_type & operator [] (key_type && k)
Vrátí hodnotu pro odpovídající klíč. Příklad:

unordered_map umap;
umap ["banana"] = "žlutá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
const char * ret = umap ["grape"];
cout << ret <<'\n';

Výstup je: „zelený“. Hodnoty lze přiřadit stejným způsobem - viz výše.

unordered_map Kapacita

size_type size () const noexcept
Vrátí počet párů na mapě.

unordered_map umap;
umap ["banana"] = "žlutá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
cout << umap.size() <<'\n';

Výstup je 3.

bool empty () const noexcept

Vrátí 1 pro true, pokud mapa nemá pár, a 0 pro false, pokud má páry. Příklad:

unordered_map umap;
cout << umap.empty() <<'\n';

Výstup je 1.

Vracející se Iterátoři a třída neuspořádané mapy

Iterátor je jako ukazatel, ale má více funkcí než ukazatel.

begin () noexcept

Vrátí iterátor, který ukazuje na první pár objektu mapy, jako v následujícím segmentu kódu:

unordered_map umap;
umap ["banana"] = "žlutá"; umap ["grape"] = "zelená"; umap ["fig"] = "fialová";
unordered_map:: iterator iter = umap.začít();
pár pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

Výstup je: obr., Fialový. Mapa je neobjednaná.

begin () const noexcept;

Vrátí iterátor, který ukazuje na první prvek kolekce objektů mapy. Když před konstrukcí objektu předchází const, provede se výraz „begin () const“ místo „start ()“. Za této podmínky nelze prvky v objektu upravit. Používá se například v následujícím kódu.

const unordered_map umap ("" banana "," yellow ",
"grape", "green", "fig", "purple");
unordered_map:: const_iterator iter = umap.začít();
pár pr = * iter;
cout << pr.first << ", " << pr.second << '\n';

Výstup je: obr., Fialový. Mapa je neobjednaná. Všimněte si, že const_iterator byl tentokrát použit místo pouhého iterátoru k přijetí vráceného iterátoru.

end () noexcept

Vrátí iterátor, který ukazuje bezprostředně za poslední prvek objektu mapy.

end () const noexcept

Vrátí iterátor, který ukazuje bezprostředně za poslední prvek objektu mapy. Když před konstrukcí objektu mapy předchází const, provede se výraz „end () const“ místo „end ()“.

unordered_map Operace

najít iterátor (const key_type & k)

Vyhledá na mapě pár daného klíče. Pokud je nalezen, vrátí iterátor. Pokud není nalezen, vrátí iterátor, který ukazuje na konec mapy, což není pár. Následující kód ukazuje, jak používat tuto členskou funkci:

unordered_map umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map:: iterator iter = umap.find ('c');
pokud (umap.najít ('c') != umap.konec())

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

Výstup je: c, d

const_iterator find (const key_type & k) const;

Tato verze funkce se nazývá, pokud tvorba neuspořádané mapy začíná const, takže všechny prvky mapy jsou jen pro čtení.

unordered_map Modifikátory

pár insert (hodnota_typu && obj)
Neuspořádaná mapa znamená, že páry nejsou v žádném pořadí. Program tedy vloží dvojici na jakékoli místo, které považuje za vhodné. Funkce se vrátí, spárovat. Pokud bylo vložení úspěšné, bool bude 1 pro true, jinak by to bylo 0 pro false. Pokud je vložení úspěšné, bude iterátor ukazovat na nově vložený prvek. Následující kód ilustruje použití:

unordered_map umap;
umap ["banana"] = "žlutá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
umap.insert ("" cherry "," red ", " strawberry "," red ");
cout << umap.size() << '\n';

Výstup je: 5. Lze vložit více než jeden pár.

size_type erase (const key_type & k)

Tato funkce vymaže pár z unordered_map. Následující segment kódu ilustruje:

unordered_map umap;
umap ["banana"] = "žlutá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
int num = umap.mazat („hroznový“);
cout << umap.size() << '\n';

Výstup je 2.
void swap (unordered_map &)
Lze zaměnit dvě neuspořádané mapy, jak je znázorněno v tomto segmentu kódu:

unordered_map umap1 = "banán", "žlutá",
"grape", "green", "fig", "purple", "strawberry", "red";
unordered_map umap2 = "cherry", "red", "lime", "green";
umap1.swap (umap2);
unordered_map:: iterátor iter1 = umap1.začít();
pár pr1 = * iter1;
unordered_map:: iterátor iter2 = umap2.začít();
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';
unordered_map umap1 = "banán", "žlutá",
"grape", "green", "fig", "purple", "strawberry", "red";
unordered_map umap2 = "cherry", "red", "lime", "green";
umap1.swap (umap2);
unordered_map:: iterátor iter1 = umap1.začít();
pár pr1 = * iter1;
unordered_map:: iterátor iter2 = umap2.začít();
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';

Výstupem je:

První klíč a velikost umap1: vápno, 2

První klíč a velikost jahody umap2, 4

Mapa je neobjednaná. V případě potřeby se délka mapy zvětší. Datové typy musí být stejné.

Třída a její instance objekty

Hodnota je pro datový typ, protože instanční objekt je pro třídu. Neuspořádaná konstrukce mapy může také přijmout třídu jako datový typ. Ilustruje to následující program:

#zahrnout
#zahrnout
pomocí jmenného prostoru std;
třída TheCla

veřejnost:
int num;
statický znak ch;
void func (char cha, const char * str)

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

static void fun (char ch)

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

;
int main ()

TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map umap;
umap = "banana", obj1, "grape", obj2, "fig", obj3, "strawberry", obj4, "lime", obj5;
cout << umap.size() << '\n';
návrat 0;

Výstup je: 5.

Definice třídy má dva veřejné členy dat a dvě veřejné členské funkce. Ve funkci main () jsou vytvořeny instance různých objektů pro třídu. Poté se vytvoří instance neuspořádané mapy, kde každá dvojice sestává z názvu ovoce a předmětu ze třídy. Zobrazí se velikost mapy. Program se kompiluje bez varování nebo chybové zprávy.

Aplikace mapy

Pole přiřadí index k hodnotě. V mnoha životních situacích existují páry klíč / hodnota, které lze naprogramovat. Pár klíč / hodnota ovoce / barvy je jen jedním příkladem. Dalším příkladem je jméno lidí a jejich věk. V tomto případě bude pár typu, páru. Může to být také pár. V druhém případě bude použita směrnice o předběžném zpracování. Párem klíč / hodnota mohou být i nadále jména manželských párů. V zemích, kde existuje polygamie, budou pro jednoho muže různé manželky.

Vytvoření mapy

Mapa není dvourozměrné pole se dvěma sloupci. Mapa funguje s hashovací funkcí. Klíč je zakódován hashovací funkcí do celého čísla pole. Je to toto pole, které uchovává hodnoty. Ve skutečnosti tedy existuje jedno pole s hodnotami a klíče jsou mapovány na indexy pole, takže jsou vytvářeny korespondence mezi klíči a hodnotami. Hašování je rozsáhlé téma a tento článek se jím nezabývá.

Závěr

Mapa, známá také jako asociativní pole, je seznam prvků, kde každý prvek je pár klíč / hodnota. Každý klíč tedy odpovídá hodnotě. V C ++ je mapa implementována jako datová struktura s členskými funkcemi a operátory. Uspořádaná mapa je ta, kde byly páry prvků seřazeny pomocí klíčů. Neuspořádaná mapa je ta, kde není možné objednávat.

Technicky se hash skládá z páru elementy. Ve skutečnosti je dvojice celá datová struktura se svými členskými funkcemi a operátory. Dva parametry šablony pro pár jsou stejné dva parametry šablony pro unordered_map.

Initializer_list pro mapu je literál pole literálů. Každý interní literál se skládá ze dvou objektů, dvojice klíč / hodnota.

Členské funkce a operátory pro unordered_map lze kategorizovat pod následující záhlaví: unordered_map konstrukce / kopírování konstrukce, unordered_map kapacita, unordered_map iterátor, unordered_map operace a unordered_map modifikátory.

Neuspořádaná mapa se používá, když má být klíč namapován na hodnotu.

Chrys

Hry 5 nejlepších arkádových her pro Linux
5 nejlepších arkádových her pro Linux
V dnešní době jsou počítače vážné stroje používané k hraní her. Pokud nemůžete získat nové vysoké skóre, budete vědět, co tím myslím. V tomto příspěvk...
Hry Battle For Wesnoth 1.13.6 Vývoj uvolněn
Battle For Wesnoth 1.13.6 Vývoj uvolněn
Battle For Wesnoth 1.13.6 vydané minulý měsíc, je šestým vývojovým vydáním v 1.13.série x a přináší řadu vylepšení, zejména do uživatelského rozhraní,...
Hry Jak nainstalovat League Of Legends na Ubuntu 14.04
Jak nainstalovat League Of Legends na Ubuntu 14.04
Pokud jste fanouškem League of Legends, pak je to pro vás příležitost otestovat běh League of Legends. Všimněte si, že LOL je podporován na PlayOnLinu...