C ++

Як користуватися невпорядкованою картою C ++

Як користуватися невпорядкованою картою C ++
Карта, також відома як асоціативний масив - це список елементів, де кожен елемент є парою ключ / значення. Отже, кожен ключ відповідає значенню. Різні клавіші можуть мати однакове значення для звичайної роботи. Наприклад, клавішами може бути список фруктів та відповідні значення, кольори фруктів. У C ++ карта реалізована як структура даних із функціями-членами та операторами. Впорядкована карта - це та, де пари елементів упорядковані за допомогою ключів. Невпорядкована карта - це карта, де немає порядку. У цій статті пояснюється, як користуватися невпорядкованою картою C ++, записаною як unordered_map. Вам потрібні знання вказівників на C ++, щоб зрозуміти цю статтю. unordered_map є частиною стандартної бібліотеки C ++.

Клас та предмети

Клас - це набір змінних та функцій, які працюють разом, де змінні не мають присвоєних значень. Коли значення присвоюються змінним, клас стає об'єктом. Різні значення, присвоєні одному і тому ж класу, призводять до різних об’єктів; тобто різні об’єкти - це один і той самий клас з різними значеннями. Створення об'єкта з класу називається екземпляром об'єкта.

Ім'я, unordered_map, є класом. Об'єкт, створений із класу unordered_map, має обране програмістом ім'я.

Функція, яка належить класу, потрібна для створення об'єкта з класу. У C ++ ця функція має те саме ім'я, що і ім'я класу. Об'єкти, створені (інстанційовані) з класу, мають різні імена, надані їм програмістом.

Створення об'єкта з класу означає побудову об'єкта; це також означає створення екземпляра.

Програма C ++, яка використовує клас unordered_map, починається з наступних рядків у верхній частині файлу:

#включати
#включати
використання простору імен std;

Перший рядок призначений для введення / виводу. Другий рядок - дозволити програмі використовувати всі функції класу unordered_map. Третій рядок дозволяє програмі використовувати імена у стандартному просторі імен.

Перевантаження функції

Коли два або більше різних підписів функцій мають одне і те ж ім'я, це ім'я вважається перевантаженим. Коли викликана одна функція, кількість і тип аргументів визначають, яка функція насправді виконується.

Конструювання / побудова копій

Просте будівництво

Невпорядковану карту можна сконструювати та присвоїти значення наступним чином:

unordered_map umap;
umap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";

Оголошення починається зі спеціалізації шаблону з типами для пар ключів і значень. Далі слідує обрана програмістом назва карти; потім крапка з комою. Другий сегмент коду показує, як призначати значення їх ключам.
Побудова за Initializer_list
Це можна зробити наступним чином:

unordered_map umap ("банан", "жовтий",
"виноград", "зелений", "фіга", "фіолетовий");

Побудова шляхом присвоєння Initializer_list
Приклад:

unordered_map umap = "банан", "жовтий",
"виноград", "зелений", "фіга", "фіолетовий";

Побудова шляхом копіювання іншої невпорядкованої_карти
Приклад:

unordered_map umap1 ("банан", "жовтий",
"виноград", "зелений", "фіга", "фіолетовий");
unordered_map umap2 (umap1);

Пара Стихія

Наступний код показує, як створити та отримати доступ до елемента пари:

пара pr = 'd', "море";
кут << pr.first << '\n';
кут << pr.second << '\n';

Результат:

d
море

перший і другий - зарезервовані слова для двох елементів у парі. Значення в парі все ще можна змінити за допомогою першого та другого.

У темі невпорядкованої карти називається пара, value_type.

unordered_map Доступ до елемента

mapped_type & operator [] (key_type && k)
Повертає значення для відповідного ключа. Приклад:

unordered_map umap;
umap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
const char * ret = umap ["виноград"];
кут << ret <<'\n';

Результат: "зелений". Значення можна призначати однаково - див. Вище.

unordered_map Ємність

size_type size () const noexcept
Повертає кількість пар на карті.

unordered_map umap;
umap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
кут << umap.size() <<'\n';

Вихід 3.

bool empty () const noexcept

Повертає 1 для true, якщо на карті немає пари, і 0 для false, якщо вона має пари. Приклад:

unordered_map umap;
кут << umap.empty() <<'\n';

Вихід - 1.

Повертаються ітератори та Клас невпорядкованої карти

Ітератор схожий на вказівник, але має більше функціональних можливостей, ніж вказівник.

begin () noexcept

Повертає ітератор, який вказує на першу пару об'єкта карти, як у наступному сегменті коду:

unordered_map umap;
umap ["банан"] = "жовтий"; umap ["виноград"] = "зелений"; umap ["fig"] = "фіолетовий";
unordered_map:: ітератор iter = umap.begin ();
пара pr = * iter;
кут << pr.first << ", " << pr.second << '\n';

Вихід: інжир, фіолетовий. Карта не упорядкована.

begin () const noexcept;

Повертає ітератор, який вказує на перший елемент колекції об'єктів карти. Коли побудові об'єкта передує const, замість "begin ()" виконується вираз "begin () const". За цієї умови елементи в об’єкті не можуть бути змінені. Наприклад, він використовується в наступному коді.

const unordered_map umap ("банан", "жовтий",
"виноград", "зелений", "фіга", "фіолетовий");
unordered_map:: const_iterator iter = umap.begin ();
пара pr = * iter;
кут << pr.first << ", " << pr.second << '\n';

Вихід: інжир, фіолетовий. Карта не упорядкована. Зауважте, що const_iterator цього разу використовувався замість просто ітератора для отримання поверненого ітератора.

end () noexcept

Повертає ітератор, який вказує безпосередньо за останнім елементом об'єкта карти.

end () const noexcept

Повертає ітератор, який вказує безпосередньо за останнім елементом об'єкта карти. Коли побудові об'єкта карти передує const, замість "end ()" виконується вираз "end () const".

unordered_map Операції

пошук ітератора (const key_type & k)

Шукає пару даного ключа на карті. Якщо він знайдений, він повертає ітератор. Якщо його не знайти, він повертає ітератор, який вказує на кінець карти, який не є парою. Наступний код показує, як використовувати цю функцію-член:

unordered_map umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map:: ітератор iter = umap.знайти ('c');
якщо (umap.знайти ('c') != umap.кінець ())

пара pr = * iter;
кут << pr.first << ", " << pr.second << '\n';

Вихід: c, d

const_iterator find (const key_type & k) const;

Ця версія функції викликається, якщо створення невпорядкованої карти починається з const, роблячи всі елементи карти лише для читання.

unordered_map Модифікатори

пара вставка (value_type && obj)
Невпорядкована карта означає, що пари розташовані не в будь-якому порядку. Отже, програма вставляє пару в будь-яке місце, яке вважає зручним. Функція повертається, пара. Якщо вставка була успішною, bool буде 1 для true, інакше буде 0 для false. Якщо вставка буде успішною, тоді ітератор вкаже на щойно вставлений елемент. Наступний код ілюструє використання:

unordered_map umap;
umap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
umap.вставка ("вишня", "червона", "полуниця", "червона");
кут << umap.size() << '\n';

Результат: 5. Можна вставити більше однієї пари.

видалення типу_розміру (const key_type & k)

Ця функція стирає пару з невпорядкованої_карти. Наступний сегмент коду ілюструє:

unordered_map umap;
umap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
int num = umap.стирання («виноград»);
кут << umap.size() << '\n';

Вихід 2.
обмін порожнечами (невпорядкована_карта &)
Дві невпорядковані карти можна поміняти місцями, як показано в цьому сегменті коду:

unordered_map umap1 = "банан", "жовтий",
"виноград", "зелений", "фіга", "фіолетовий", "полуниця", "червоний";
unordered_map umap2 = "вишня", "червона", "лайм", "зелена";
umap1.обмін (umap2);
unordered_map:: ітератор iter1 = umap1.begin ();
пара pr1 = * iter1;
unordered_map:: ітератор iter2 = umap2.begin ();
пара pr2 = * iter2;
кут << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
кут << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
unordered_map umap1 = "банан", "жовтий",
"виноград", "зелений", "фіга", "фіолетовий", "полуниця", "червоний";
unordered_map umap2 = "вишня", "червона", "лайм", "зелена";
umap1.обмін (umap2);
unordered_map:: ітератор iter1 = umap1.begin ();
пара pr1 = * iter1;
unordered_map:: ітератор iter2 = umap2.begin ();
пара pr2 = * iter2;
кут << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
кут << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';

Результат:

Перший ключ і розмір umap1: вапно, 2

Перший ключ і розмір полуниці umap2, 4

Карта не упорядкована. Зверніть увагу, що довжина карти при необхідності збільшується. Типи даних повинні бути однаковими.

Клас та його інстансовані об'єкти

Значення стосується типу даних, як екземплярний об’єкт - до класу. Невпорядкована конструкція карти також може приймати клас як тип даних. Наступна програма це ілюструє:

#включати
#включати
використання простору імен std;
клас TheCla

публічний:
int num;
статичний символ ch;
void func (char cha, const char * str)

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

статична порожня забава (char ch)

якщо (ch == 'a')
кут << "Official static member function" << '\n';

;
int main ()

TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map umap;
umap = "банан", obj1, "виноград", obj2, "фіга", obj3, "полуниця", obj4, "лайм", obj5;
кут << umap.size() << '\n';
повернути 0;

Результат: 5.

Визначення класу має два загальнодоступних члена даних та дві загальнодоступні функції членів. У функції main () створюються екземпляри різних об'єктів для класу. Потім створюється невпорядкована карта, де кожна пара складається з назви фрукта та об’єкта з класу. Відображається розмір карти. Програма компілюється без попередження або повідомлення про помилку.

Застосування карти

Масив пов'язує індекс зі значенням. Пари ключ / значення існують у багатьох життєвих ситуаціях, які можна запрограмувати. Пара ключ / значення фрукт / колір - лише один із прикладів. Інший приклад - ім’я людей та їх вік. У цьому випадку пара буде типу, пари. Це також може бути пара. В останньому випадку буде застосована директива попередньої обробки. Парою ключ / значення все ще можуть бути імена подружніх пар. У країнах, де існує багатоженство, для одного чоловіка знайдуться різні дружини.

Формування карти

Карта не є двовимірним масивом з двома стовпцями. Карта працює з хеш-функцією. Ключ кодується хеш-функцією у ціле число масиву. Саме цей масив містить значення. Отже, насправді є один масив зі значеннями, і ключі зіставляються з індексами масиву, і тому відповідність між ключами та значеннями здійснюється. Хешування - велика тема, і ця стаття не висвітлює.

Висновок

Карта, також відома як асоціативний масив - це список елементів, де кожен елемент є парою ключ / значення. Отже, кожен ключ відповідає значенню. У C ++ карта реалізована як структура даних із функціями-членами та операторами. Впорядкована карта - це та, де пари елементів упорядковані за допомогою ключів. Невпорядкована карта - це карта, на якій немає замовлення.

Технічно хеш складається з пари елементів. Насправді пара являє собою цілу структуру даних зі своїми функціями-членами та операторами. Два параметри шаблону для пари - це однакові два параметри шаблону для unordered_map.

Список ініціалізаторів для карти є літералом масиву з літералів. Кожен внутрішній літерал складається з двох об’єктів - пари ключ / значення.

Функції-члени та оператори для невпорядкованої_карти можна класифікувати за такими заголовками: невпорядкована_конструкція / побудова копії, невпорядкована_мапа ємності, невпорядкована_мапа ітератор, невпорядкована_мапа оператори та невпорядкована_мапа модифікатори.

Невпорядкована карта використовується, коли ключ потрібно зіставити зі значенням.

Кріс

Middle mouse button not working in Windows 10
The middle mouse button helps you scroll through long webpages and screens with a lot of data. If that stops, well you will end up using the keyboard ...
How to change Left & Right mouse buttons on Windows 10 PC
It's quite a norm that all computer mouse devices are ergonomically designed for right-handed users. But there are mouse devices available which are s...
Emulate Mouse clicks by hovering using Clickless Mouse in Windows 10
Using a mouse or keyboard in the wrong posture of excessive usage can result in a lot of health issues, including strain, carpal tunnel syndrome, and ...