Trieda a predmety
Trieda je skupina premenných a funkcií, ktoré spolupracujú, pričom premenným nie sú priradené hodnoty. Keď sú premenným priradené hodnoty, trieda sa stane objektom. Rôzne hodnoty dané tej istej triede majú za následok rôzne objekty; to znamená, že rôzne objekty sú rovnakej triedy s rôznymi hodnotami. Vytvorenie objektu z triedy sa považuje za vytvorenie jeho inštancie.
Názov unordered_map je trieda. Objekt vytvorený z triedy unordered_map má programátorom vybraný názov.
Na vytvorenie inštancie objektu z triedy je potrebná funkcia patriaca do triedy. V jazyku C ++ má táto funkcia rovnaký názov ako názov triedy. Objekty vytvorené (inštancované) z triedy majú programátor pomenované rôznymi názvami.
Vytvorenie objektu z triedy znamená konštrukciu objektu; znamená to aj inštanciu.
Program v C ++, ktorý používa triedu unordered_map, sa začína nasledujúcimi riadkami v hornej časti súboru:
#include#include
pomocou namespace std;
Prvý riadok je pre vstup / výstup. Druhým riadkom je umožniť programu využívať všetky funkcie triedy unordered_map. Tretí riadok umožňuje programu používať názvy v štandardnom mennom priestore.
Preťaženie funkcie
Ak majú dva alebo viac rôznych podpisov funkcií rovnaký názov, je tento názov údajne preťažený. Keď sa volá jedna funkcia, počet a typ argumentov určuje, ktorá funkcia sa skutočne vykoná.
Konštrukcia / kopírovanie
Jednoduchá konštrukcia
Neusporiadanú mapu je možné zostrojiť a priradiť jej hodnoty nasledovne:
unordered_mapumap ["banana"] = "žltá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
Deklarácia sa začína špecializáciou na šablóny s typmi pre páry kľúč a hodnota. Potom nasleduje programovo zvolené meno pre mapu; potom bodkočiarku. Druhý segment kódu ukazuje, ako priradiť hodnoty k ich klávesom.
Konštrukcia podľa Initializer_list
Môžete to urobiť nasledovne:
"grape", "green", "fig", "purple");
Konštrukcia priradením Initializer_list
Príklad:
"grape", "green", "fig", "purple";
Konštrukcia kopírovaním ďalšej unordered_map
Príklad:
"grape", "green", "fig", "purple");
unordered_map
Pár Element
Nasledujúci kód ukazuje, ako vytvoriť a získať prístup k prvku páru:
párcout << pr.first << '\n';
cout << pr.second << '\n';
Výstup je:
dmore
prvé a druhé sú vyhradené slová pre dve položky v páre. Hodnoty v páre je možné stále meniť pomocou prvého a druhého.
V téme neusporiadanej mapy sa nazýva pár value_type.
unordered_map Element Access
mapped_type & operator [] (key_type && k)
Vráti hodnotu pre zodpovedajúci kľúč. Príklad:
umap ["banana"] = "žltá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
const char * ret = umap ["hrozno"];
cout << ret <<'\n';
Výstup je: „zelený“. Hodnoty je možné priradiť rovnakým spôsobom - pozri vyššie.
unordered_map Kapacita
size_type size () const noexcept
Vráti počet párov na mape.
umap ["banana"] = "žltá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
cout << umap.size() <<'\n';
Výstup je 3.
bool empty () const noexcept
Vráti hodnotu 1 pre true, ak mapa nemá pár, a 0 pre false, ak má páry. Príklad:
unordered_mapcout << umap.empty() <<'\n';
Výstup je 1.
Vracajúce sa iterátory a trieda neusporiadaných máp
Iterátor je ako ukazovateľ, ale má viac funkcií ako ukazovateľ.
begin () noexcept
Vráti iterátor, ktorý ukazuje na prvý pár mapového objektu, ako v nasledujúcom segmente kódu:
unordered_mapumap ["banana"] = "žltá"; umap ["grape"] = "zelená"; umap ["fig"] = "fialová";
unordered_map
pár
cout << pr.first << ", " << pr.second << '\n';
Výstup je: figový, fialový. Mapa nie je zoradená.
begin () const noexcept;
Vráti iterátor, ktorý ukazuje na prvý prvok kolekcie mapových objektov. Ak konštrukcii objektu predchádza const, namiesto výrazu „begin ()“ sa vykoná výraz „begin () const“. Za týchto podmienok nemožno upravovať prvky v objekte. Používa sa napríklad v nasledujúcom kóde.
const unordered_map"grape", "green", "fig", "purple");
unordered_map
pár
cout << pr.first << ", " << pr.second << '\n';
Výstup je: figový, fialový. Mapa nie je zoradená. Všimnite si, že const_iterator bol tentokrát použitý namiesto iba iterátora na príjem vráteného iterátora.
end () noexcept
Vráti iterátor, ktorý smeruje bezprostredne za posledný prvok mapového objektu.
end () const noexcept
Vráti iterátor, ktorý smeruje bezprostredne za posledný prvok mapového objektu. Keď konštrukcii mapového objektu predchádza const, namiesto „end ()“ sa vykoná výraz „end () const“.
unordered_map Operácie
find iterator (const key_type & k)
Vyhľadá dvojicu zadaných kľúčov na mape. Ak sa nájde, vráti iterátor. Ak sa nenájde, vráti iterátor, ktorý ukazuje na koniec mapy, čo nie je pár. Nasledujúci kód ukazuje, ako sa používa táto členská funkcia:
unordered_mapumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map
ak (umap.nájsť ('c') != umap.koniec())
pár
cout << pr.first << ", " << pr.second << '\n';
Výstup je: c, d
const_iterator find (const key_type & k) const;
Táto verzia funkcie sa nazýva, ak sa tvorba neusporiadanej mapy začína znakom const, čím sa všetky prvky mapy stanú iba na čítanie.
unordered_map Modifikátory
pár
Neusporiadaná mapa znamená, že páry nie sú v žiadnom poradí. Program teda vloží dvojicu na akékoľvek miesto, ktoré považuje za vhodné. Funkcia sa vráti, spárovať
umap ["banana"] = "žltá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
umap.vložka ("" čerešňa "," červená ", " jahoda "," červená ");
cout << umap.size() << '\n';
Výstup je: 5. Môže byť vložených viac ako jeden pár.
size_type erase (const key_type & k)
Táto funkcia vymaže pár z mapy unordered_map. Nasledujúci segment kódu ilustruje:
unordered_mapumap ["banana"] = "žltá";
umap ["grape"] = "zelená";
umap ["fig"] = "fialová";
int num = umap.vymazať („hrozno“);
cout << umap.size() << '\n';
Výstup je 2.
výmena neplatnosti (unordered_map &)
Je možné zameniť dve neusporiadané mapy, ako je to znázornené v tomto segmente kódu:
"hrozno", "zelená", "figa", "fialová", "jahoda", "červená";
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
"hrozno", "zelená", "figa", "fialová", "jahoda", "červená";
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ýstup je:
Prvý kľúč a veľkosť umap1: vápno, 2
Prvý kľúč a veľkosť jahody umap2, 4
Mapa nie je zoradená. Upozorňujeme, že dĺžka mapy sa v prípade potreby zväčší. Dátové typy musia byť rovnaké.
Trieda a jej instantizované objekty
Hodnota je pre dátový typ, rovnako ako inštančný objekt pre triedu. Neusporiadaná konštrukcia mapy môže tiež prijať triedu ako dátový typ. Nasledujúci program to ilustruje:
#include#include
pomocou namespace std;
trieda TheCla
verejné:
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, "jahoda", obj4, "limetka", obj5;
cout << umap.size() << '\n';
návrat 0;
Výstup je: 5.
Definícia triedy má dva verejné verejné členy a dve verejné členské funkcie. Vo funkcii main () sú inštancované rôzne objekty pre triedu. Potom sa vytvorí inštancia neusporiadanej mapy, kde každý pár pozostáva z názvu ovocia a predmetu z triedy. Zobrazí sa veľkosť mapy. Program sa kompiluje bez varovania alebo chybovej správy.
Aplikácia mapy
Pole priraďuje index k hodnote. Páry kľúč / hodnota existujú v mnohých životných situáciách, ktoré je možné programovať. Pár kľúč - hodnota ovocie / farba je len jedným príkladom. Ďalším príkladom je meno ľudí a ich vek. V takom prípade bude dvojica typu, páru
Tvorba mapy
Mapa nie je dvojrozmerné pole s dvoma stĺpcami. Mapa funguje s funkciou hash. Kľúč je kódovaný hašovacou funkciou do celého čísla poľa. Je to toto pole, ktoré uchováva hodnoty. Takže v skutočnosti existuje jedno pole s hodnotami a kľúče sú mapované na indexy poľa, takže sa vytvára korešpondencia medzi kľúčmi a hodnotami. Hašovanie je rozsiahla téma, ktorej sa tento článok nevenuje.
Záver
Mapa, známa tiež ako asociatívne pole, je zoznam prvkov, kde každý prvok predstavuje pár kľúč - hodnota. Každý kľúč teda zodpovedá hodnote. V C ++ je mapa implementovaná ako dátová štruktúra s členskými funkciami a operátormi. Usporiadaná mapa je mapa, kde boli páry prvkov zoradené pomocou klávesov. Neusporiadaná mapa je taká, na ktorej nie je možné objednávať.
Technicky sa hash skladá z páru
Initializer_list pre mapu je pole literálu literálov. Každý interný literál pozostáva z dvoch objektov, páru kľúč / hodnota.
Členské funkcie a operátory pre unordered_map je možné kategorizovať do nasledujúcich nadpisov: unordered_map construction / copy constructing, unordered_map Capacity, unordered_map iterator, unordered_map Operations a unordered_map Modifikátory.
Neusporiadaná mapa sa používa, keď sa má kľúč namapovať na hodnotu.
Chrys