neuspořádaná_mapa je přidružený kontejner, který ukládá prvky tvořené kombinací hodnoty klíče a namapované hodnoty. Hodnota klíče se používá k jedinečné identifikaci prvku a mapovaná hodnota je obsah spojený s klíčem. Klíč i hodnota mohou být libovolného typu předdefinovaného nebo definovaného uživatelem. Jednoduše řečeno, an neuspořádaná_mapa je jako datová struktura typu slovníku, která v sobě ukládá prvky. Obsahuje po sobě jdoucí páry (klíč, hodnota), což umožňuje rychlé vyhledání jednotlivého prvku na základě jeho jedinečného klíče.
římská čísla 1 až 100
Interně unordered_map je implementována pomocí Hash Table , klíč poskytnutý k mapování je hašován do indexů hašovací tabulky, což je důvod, proč výkon datové struktury hodně závisí na hašovací funkci, ale v průměru náklady na hledat, vkládat a mazat z hash tabulky je O(1).
Poznámka: V nejhorším případě se jeho časová složitost může pohybovat od O(1) do O(n), zejména u velkých prvočísel. V této situaci je velmi vhodné místo toho použít mapu, abyste se vyhnuli chybě TLE (Time Limit Exceeded).
Syntax:

unordered_map syntaxe
Níže je uveden program C++, který demonstruje neuspořádanou mapu:
C++
// C++ program to demonstrate> // functionality of unordered_map> #include> #include> using> namespace> std;> > // Driver code> int> main()> {> >// Declaring umap to be of> >// type key> >// will be of STRING type> >// and mapped VALUE will> >// be of int type> >unordered_mapint>umap; // vložení hodnot pomocí operátoru [] umap['techcodeview.com'] = 10; umap['Cvičení'] = 20; umap['Contribute'] = 30; // Procházení neuspořádané mapy pro (auto x : umap) cout<< x.first << ' ' << x.second << endl; }> |
>
>Výstup
Contribute 30 Practice 20 techcodeview.com 10>

unordered_map Výstup
Vysvětlení: Specifická věc, kterou tento výstup ospravedlňuje, je to, že hodnota výsledku unordered_map je vytvářena náhodným způsobem klíč k hodnotě, zatímco mapa zobrazuje hodnotu a klíč uspořádaným způsobem.
unordered_map vs unordered_set
| Neuspořádaná_mapa | Neuspořádaná_sada |
|---|---|
| Unordered_map obsahuje prvky pouze ve formě párů (klíč-hodnota). | Unordered_set nemusí nutně obsahovat prvky ve formě párů klíč-hodnota, ty se používají hlavně k zobrazení přítomnosti/nepřítomnosti sady. |
| Operátor' []' extrahovat odpovídající hodnotu klíče, který je přítomen v mapě. | Hledání prvku se provádí pomocí a nalézt () funkce. Není tedy potřeba operátor[]. |
Poznámka: Vezměme si například problém počítání frekvencí jednotlivých slov. Nemůžeme použít unordered_set (nebo set), protože nemůžeme ukládat počty, zatímco můžeme použít unordered_map.
unordered_map vs mapa
| Neuspořádaná_mapa | Mapa |
|---|---|
| Klíč unordered_map lze uložit v libovolném pořadí. | Mapa je uspořádaná sekvence jedinečných klíčů |
| Unordered_Map implementuje nevyváženou stromovou strukturu, kvůli které není možné udržovat pořádek mezi prvky | Mapa implementuje vyváženou stromovou strukturu, proto je možné udržovat pořádek mezi prvky (konkrétním procházením stromu) |
| Časová složitost operací unordered_map je v průměru O(1). | Časová složitost mapových operací je O(log n) |
Metody na unordered_map
K dispozici je mnoho funkcí, které fungují na unordered_map. Nejužitečnější z nich jsou:
- operator = operator [] prázdná velikost začátku a konce kapacity iterátoru. najít a spočítat pro vyhledání. vložit a vymazat pro úpravu.
Níže uvedená tabulka ukazuje úplný seznam metod unordered_map:
| Metody/Funkce | Popis |
|---|---|
| na() | Tato funkce v C++ unordered_map vrací odkaz na hodnotu s prvkem jako klíč k |
| začít() | Vrátí iterátor ukazující na první prvek v kontejneru v kontejneru unordered_map |
| konec() | Vrátí iterátor ukazující na pozici za posledním prvkem v kontejneru v kontejneru unordered_map |
| Kbelík() | Vrátí číslo segmentu, kde se na mapě nachází prvek s klíčem k |
| bucket_count | Bucket_count se používá k počítání celkového počtu. bucketů v unordered_map. Pro přechod do této funkce není vyžadován žádný parametr |
| bucket_size | Vrátí počet prvků v každém segmentu unordered_map |
| počet() | Spočítejte počet prvků přítomných v unordered_map s daným klíčem |
| stejný_rozsah | Vraťte hranice rozsahu, který zahrnuje všechny prvky v kontejneru, s klíčem, který se rovná k |
| nalézt() | Vrátí iterátor prvku |
| prázdný() | Zkontroluje, zda je kontejner prázdný v kontejneru unordered_map |
| vymazat() | Vymazat prvky v kontejneru v kontejneru unordered_map |
Knihovna C++11 také poskytuje funkce pro zobrazení interně používaného počtu segmentů, velikosti segmentu a také použité hašovací funkce a různých hašovacích zásad, ale v reálných aplikacích jsou méně užitečné. Můžeme iterovat přes všechny prvky unordered_map pomocí Iteratoru.
C++
// C++ program to demonstrate> // Initialization, indexing,> // and iteration> #include> #include> using> namespace> std;> > // Driver code> int> main()> {> >// Declaring umap to be of> >// type key> >// will be of string type and> >// mapped value will be of double type> >unordered_mapdouble>umap = { //vložení prvku přímo do mapy {'Jedna', 1}, {'Dva', 2}, {'Tři', 3} }; // vložení hodnot pomocí operátoru [] umap['PI'] = 3.14; umap['root2'] = 1,414; umap['root3'] = 1,732; umap['log10'] = 2,302; umap['loge'] = 1,0; // vložení hodnoty funkcí insert umap.insert(make_pair('e', 2.718)); klíč řetězce = 'PI'; // Pokud klíč nebyl nalezen v iterátoru mapy // to end je vráceno if (umap.find(key) == umap.end()) cout<< key << ' not found
'; // If key found then iterator to that // key is returned else cout << 'Found ' << key << '
'; key = 'lambda'; if (umap.find(key) == umap.end()) cout << key << ' not found
'; else cout << 'Found ' << key << endl; // iterating over all value of umap unordered_mapdouble>::iterator itr; cout<< '
All Elements :
'; for (itr = umap.begin(); itr != umap.end(); itr++) { // itr works as a pointer to // pair type // itr->nejprve uloží klíčovou část a // itr->second uloží hodnotu část cout ' '<< itr->druhý<< endl; } }> |
>
>
string.format v jazyce JavaVýstup
Found PI lambda not found All Elements : e 2.718 loge 1 log10 2.302 Two 2 One 1 Three 3 PI 3.14 root2 1.414 root3 1.732>
Najděte frekvence jednotlivých slov
Vzhledem k řetězci slov je úkolem najít frekvence jednotlivých slov:
Vstup: str = geeks for geeks geeks quiz practice qa for;
Výstup: Frekvence jednotlivých slov jsou
(cvičení, 1)
(pro, 2)
(qa, 1)
(kvíz, 1)
(geekové, 3)
Níže je uveden program C++ pro implementaci výše uvedeného přístupu:
C++
// C++ program to find freq> // of every word using unordered_map> #include> using> namespace> std;> > // Prints frequencies of> // individual words in str> void> printFrequencies(>const> string &str)> {> >// declaring map of type,> >// each word is mapped to its frequency> >unordered_mapint>wordFreq; // rozdělení vstupu na slovo pomocí // string stream // Používá se pro rozdělení slov stringstream ss(str); // Pro uložení jednotlivých slov string word; while (ss>> slovo) wordFreq[slovo]++; // nyní iteruji přes word, freq pair // a tiskneme je ve formátu unordered_mapint>:: iterator p; for (p = wordFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->druhý<< ')
'; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }> |
>
>Výstup
(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>
Nejnovější články na unordered_map