unordered_map це асоційований контейнер, який зберігає елементи, утворені комбінацією значення ключа та зіставленого значення. Значення ключа використовується для унікальної ідентифікації елемента, а зіставлене значення є вмістом, пов’язаним із ключем. І ключ, і значення можуть бути будь-якого типу, попередньо визначеного або визначеного користувачем. Простіше кажучи, ан unordered_map це як структура даних словникового типу, яка зберігає елементи в собі. Він містить послідовні пари (ключ, значення), що дозволяє швидко знайти окремий елемент на основі його унікального ключа.
рекха індійська
Внутрішньо unordered_map реалізовано за допомогою хеш-таблиці, ключ, наданий для відображення, хешується в індекси хеш-таблиці, тому продуктивність структури даних значною мірою залежить від хеш-функції, але в середньому вартість пошук, вставка та видалення з хеш-таблиці дорівнює O(1).
Примітка: У гіршому випадку його часова складність може переходити від O(1) до O(n), особливо для великих простих чисел. У цій ситуації настійно рекомендується використовувати карту, щоб уникнути помилки TLE (Time Limit Exceeded).
Синтаксис:

синтаксис unordered_map
Нижче наведено програму C++ для демонстрації невпорядкованої карти:
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; // вставка значень за допомогою оператора [] umap['techcodeview.com'] = 10; umap['Практика'] = 20; umap['Contribute'] = 30; // Обхід невпорядкованої карти для (auto x : umap) cout<< x.first << ' ' << x.second << endl; }> |
>
>Вихід
Contribute 30 Practice 20 techcodeview.com 10>

unordered_map Вихід
Пояснення: Специфічною річчю, яку виправдовує цей вихід, є те, що значення результату unordered_map створюється у випадковому порядку від ключа до значення, тоді як карта відображає значення та ключ у впорядкованому порядку.
unordered_map проти unordered_set
| Unordered_map | Невпорядкований_набір |
|---|---|
| Unordered_map містить елементи лише у формі пар (ключ-значення). | Unordered_set не обов’язково містить елементи у формі пар ключ-значення, вони в основному використовуються, щоб побачити наявність/відсутність набору. |
| оператор []' щоб отримати відповідне значення ключа, який присутній у карті. | Пошук елемента виконується за допомогою a знайти () функція. Тому оператор []. |
Примітка: Наприклад, розглянемо задачу підрахунку частот окремих слів. Ми не можемо використовувати unordered_set (або set), оскільки ми не можемо зберігати підрахунки, хоча ми можемо використовувати unordered_map.
unordered_map проти карти
| Unordered_map | Карта |
|---|---|
| Ключ unordered_map можна зберігати в будь-якому порядку. | Карта — це впорядкована послідовність унікальних ключів |
| Unordered_Map реалізує незбалансовану деревовидну структуру, через яку неможливо підтримувати порядок між елементами | Карта реалізує збалансовану структуру дерева, тому можна підтримувати порядок між елементами (шляхом певного обходу дерева) |
| Часова складність операцій unordered_map в середньому становить O(1). | Часова складність операцій з картою становить O(log n) |
Методи на unordered_map
Доступно багато функцій, які працюють на unordered_map. Найкорисніші з них:
- operator = operator [] порожній розмір для початку та кінця ємності для ітератора. знайти та підрахувати для пошуку. вставити та стерти для модифікації.
У таблиці нижче показано повний список методів unordered_map:
| Методи/Функції | опис |
|---|---|
| в() | Ця функція в C++ unordered_map повертає посилання на значення з елементом як ключ k |
| почати() | Повертає ітератор, що вказує на перший елемент у контейнері unordered_map |
| кінець() | Повертає ітератор, що вказує на позицію після останнього елемента в контейнері в контейнері unordered_map |
| відро() | Повертає номер сегмента, де на карті розташований елемент із ключем k |
| bucket_count | Bucket_count використовується для підрахунку загальної кількості. відер у unordered_map. Жоден параметр не потрібен для передачі в цю функцію |
| bucket_size | Повертає кількість елементів у кожному сегменті unordered_map |
| рахувати() | Підрахувати кількість елементів у unordered_map із заданим ключем |
| рівний_діапазон | Повертає межі діапазону, який включає всі елементи в контейнері, за допомогою ключа, порівняння якого дорівнює k |
| знайти() | Повертає ітератор до елемента |
| порожній() | Перевіряє, чи порожній контейнер у контейнері unordered_map |
| стерти() | Видалити елементи в контейнері в контейнері unordered_map |
Бібліотека C++11 також надає функції для перегляду внутрішньо використовуваної кількості сегментів, розміру сегментів, а також використаної хеш-функції та різних хеш-політик, але вони менш корисні в реальних програмах. Ми можемо перебирати всі елементи unordered_map за допомогою Iterator.
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 = { //вставлення елемента безпосередньо в карту {'One', 1}, {'Two', 2}, {'Three', 3} }; // вставка значень за допомогою [] operator umap['PI'] = 3.14; umap['root2'] = 1,414; umap['root3'] = 1,732; umap['log10'] = 2,302; umap['loge'] = 1,0; // вставка значення за допомогою функції вставки umap.insert(make_pair('e', 2.718)); ключ рядка = 'PI'; // Якщо ключ не знайдено в ітераторі карти // to end повертається 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>::ітератор itr; cout<< '
All Elements :
'; for (itr = umap.begin(); itr != umap.end(); itr++) { // itr works as a pointer to // pair type // itr->перший зберігає ключову частину, а // itr->другий зберігає значення cout ' '<< itr->другий<< endl; } }> |
>
python os listdir
>Вихід
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>
Знайдіть частотність окремих слів
Дано рядок слів, завдання полягає в тому, щоб знайти частоти окремих слів:
введення: str = geeks для geeks geeks quiz practice qa for;
Вихід: Частоти окремих слів є
(практика, 1)
(для, 2)
(qa, 1)
(тест, 1)
(гіки, 3)
Нижче наведено програму C++ для реалізації вищезазначеного підходу:
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; // розбиття введення на слово за допомогою // потоку рядків // Використовується для розбиття слів stringstream ss(str); // Для збереження окремих слів string word; while (ss>> слово) wordFreq[слово]++; // тепер ітерація слова, пари частот // і друк їх у форматі unordered_mapint>:: iterator p; for (p = wordFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->другий<< ')
'; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }> |
>
>Вихід
(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>
Останні статті на unordered_map