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_mapumap ["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ě:
"grape", "green", "fig", "purple");
Stavba přiřazením Initializer_list
Příklad:
"grape", "green", "fig", "purple";
Konstrukce kopírováním další unordered_map
Příklad:
"grape", "green", "fig", "purple");
unordered_map
Dvojice Živel
Následující kód ukazuje, jak vytvořit a získat přístup k prvku páru:
párcout << pr.first << '\n';
cout << pr.second << '\n';
Výstupem je:
dmoř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:
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ě.
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_mapcout << 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_mapumap ["banana"] = "žlutá"; umap ["grape"] = "zelená"; umap ["fig"] = "fialová";
unordered_map
pár
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"grape", "green", "fig", "purple");
unordered_map
pár
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_mapumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map
pokud (umap.najít ('c') != umap.konec())
pár
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
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
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_mapumap ["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:
"grape", "green", "fig", "purple", "strawberry", "red";
unordered_map
umap1.swap (umap2);
unordered_map
pár
unordered_map
pár
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
"grape", "green", "fig", "purple", "strawberry", "red";
unordered_map
umap1.swap (umap2);
unordered_map
pár
unordered_map
pár
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 = "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
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
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