Що таке std :: map?
У C ++ MAP - це асоціативний контейнер, що зберігає елементи у відображеній формі. Кожен елемент на карті складається з ключа-значення та відображеного значення. Два зіставлені значення не можуть використовувати однакові ключові значення.
Ключові значення корисні для сортування та ідентифікації елементів однозначно. Зіставлені значення призначені для зберігання вмісту, пов'язаного з ключем. Ці два типи можуть відрізнятися за типами, але тип-член поєднує їх за допомогою парного типу, який поєднує обидва.
У цьому підручнику з C ++ ви дізнаєтесь:
- Що таке std :: map?
- Навіщо використовувати std :: map?
- Синтаксис:
- Типи учасників:
- Вбудовані функції
- Ітерація над елементами карти
- Вставка даних у std :: map:
- Пошук на карті
- Видалення даних з карти
Навіщо використовувати std :: map?
Ось причини використання карти:
- std :: map зберігає унікальні ключі лише у відсортованому порядку на основі обраних критеріїв сортування.
- Шукати елементи за допомогою ключа легко і швидше.
- До кожного ключа прикріплений лише один елемент.
- std :: map може використовуватися як асоціативний масив.
- std :: map реалізується за допомогою двійкових дерев (збалансованих).
Синтаксис:
Щоб оголосити std :: map, використовуйте такий синтаксис:
std::mapmap_name;
- Key_datatype позначає тип даних ключів карти.
- Value_datatype позначає тип даних значень, що відповідають ключам карти.
- Назва_карти - це назва карти.
Наприклад:
mapmy_map;
Ми оголосили карту з назвою my_map. Карта буде мати рядок в якості основних типів даних і цілого числа в якості значень типу даних.
Типи учасників:
Функції-члени можуть використовувати такі типи членів як параметри або тип повернення:
- key_type: Key (перший параметр у шаблоні)
- mapped_type: T (Другий параметр у шаблоні)
- key_compare: Порівняти (третій параметр у шаблоні)
- allocator_type: Alloc (четвертий параметр у шаблоні)
- тип_значення: пара
- value_compare: Вкладений клас функції для порівняння елементів
- посилання: allocator_type :: reference
- const_reference: allocator_type :: const_reference
- покажчик: allocator_type :: pointer
- const_pointer: allocator_type :: const_pointer
- ітератор: двонаправлений ітератор до значення_типу
- const_iterator: двонаправлений ітератор до const value_type
- reverse_iterator: зворотний ітератор
- const_reverse_iterator: постійний зворотний ітератор
- тип_різниці : ptrdiff_t
- size_type: size_t
Вбудовані функції
std :: map має вбудовані функції. Деякі з них включають:
- begin () - Ця функція повертає ітератор до першого елемента карти.
- size () - Ця функція повертає кількість елементів на карті.
- empty () - Ця функція повертає логічне значення, яке вказує, чи порожня карта.
- вставка (пара (ключ, значення)) - Ця функція вставляє нову пару ключ-значення на карту.
- find (val) - Ця функція надає ітератор елементу val, якщо його знайдено. В іншому випадку він поверне m.end ().
- Стерти (позиція ітератора) - Ця функція видаляє елемент у позиції, вказаній ітератором.
- стерти (const g) - Ця функція видаляє ключ-значення g з карти.
- Clear () - Ця функція видаляє всі елементи з карти.
Ітерація над елементами карти
Ви можете переглядати елементи карти. Нам просто потрібно створити ітератор і використовувати його для цього. Наприклад:
Приклад 1:
#include#include #include
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream до нашого коду, щоб використовувати його функції.
- Включіть файл заголовка рядка в наш код, щоб використовувати його функції.
- Включіть файл заголовка карти в наш код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Значок {позначає початок тіла функції.
- Створіть карту з іменем Студенти, де ключі будуть цілими числами, а значення - рядками.
- Вставте значення на карту Студенти. Ключ 200 і значення Аліса буде вставлено на карту.
- Вставте значення на карту Студенти. На карту буде вставлено ключ 201 та значення Джона.
- Використовуйте функцію size (), щоб отримати розмір карти з іменем Студенти. Це має повернути 2.
- Роздрукуйте текст на консолі.
- Використовуйте цикл for, щоб створити ітератор з іменем для перебору елементів карти з іменем Студенти.
- Роздрукуйте значення карти Студенти на консолі.
- Кінець тіла циклу for.
- Кінець тіла основної () функції.
Вставка даних у std :: map
Ви можете вводити елементи в std :: map за допомогою функції insert (). Пам'ятайте, що ключі std :: map повинні бути унікальними.
Отже, спочатку перевіряється, чи кожен ключ присутній на карті. Якщо він присутній, запис не буде вставлений, але він повертає ітератор для існуючого запису. Якщо його немає, запис вставляється.
Функція має такі варіації:
- вставка (пара) - із цим варіантом пара ключ-значення вставляється на карту.
- вставка (start_itr, end_itr) - із цим варіантом записи будуть вставлені в діапазон, визначений start_itr та end_itr з іншої карти.
Функція insert_or_assing () працює так само, як функція insert (), але якщо даний ключ вже існує на карті, його значення буде змінено.
Приклад 2:
#include
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка карти в наш код, щоб використовувати його функції.
- Включіть файл заголовка iostream до нашого коду, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Значок {позначає початок тіла функції.
- Створіть карту з іменем m, де ключі будуть цілими числами, а значення - цілими числами. На карту внесено три записи.
- Вставте новий запис на карту m. На карту буде вставлено ключ 5 і значення 6.
- Спроба ввести вже існуючий ключ. Оскільки ключ 1 вже існує на карті, введення не буде здійснено.
- Використання функції insert_or_assign () для вставки або модифікації існуючого запису. Оскільки ключ 1 уже існує, його значення буде змінено на 6.
- Роздрукуйте текст на консолі. Символ "\ t" створює горизонтальний пробіл, тоді як символ "\ n" переміщує курсор миші до наступного рядка.
- Використовуйте цикл for, щоб створити ітератор з назвою itr для ітерації над елементами карти з іменем m.
- Надрукуйте значення карти m на консолі. Символ "\ t" створює горизонтальний пробіл між кожною клавішею та її відповідним значенням. На відміну від цього, символ "\ n" переміщує курсор миші до наступного рядка після кожної ітерації.
- Кінець корпусу петлі.
- Після успішного завершення програма повинна повертати значення.
- Кінець тіла основної () функції.
Пошук на карті
Ми можемо використовувати функцію find () для пошуку елементів на карті за їх ключами. Якщо ключа не знайдено, функція повертає std :: map :: end. В іншому випадку повертається ітератор шуканого елемента.
Приклад 2:
#include#include #include
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream до нашого коду, щоб використовувати його функції без помилок.
- Включіть файл заголовка рядка в наш код, щоб використовувати його функції без помилок.
- Включіть файл заголовка карти в наш код, щоб використовувати його функції без помилок.
- Включіть простір імен std у наш код, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Значок {позначає початок основної функції main ().
- Створіть карту з іменем Студенти, ключі якої будуть цілими числами та рядками значень.
- Вставте значення на карту Студенти. Ключ 200 і значення Аліса буде вставлено на карту.
- Вставте значення на карту Студенти. На карту буде вставлено ключ 201 та значення Джона.
- Шукайте значення, пов’язане з ключем 201.
- За допомогою оператора if перевірте, чи знайдено значення ключа.
- Надрукуйте значення ключа поряд із текстом на консолі.
- Кінець тексту оператора if.
- Кінець тіла основної () функції.
Видалення даних з карти
Ми можемо використовувати функцію erase (), щоб видалити значення з карти. Ми просто створюємо ітератор, який вказує на елемент, який потрібно видалити. Потім ітератор передається функції erase ().
Приклад 3:
#include#include #include
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream до нашого коду, щоб використовувати його функції.
- Включіть файл заголовка рядка в наш код, щоб використовувати його функції.
- Включіть файл заголовка карти в наш код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Значок {позначає початок основної функції main ().
- Створіть карту з ім'ям my_map, ключі якої будуть рядками та значеннями цілих чисел.
- Вставте значення в карту my_map. Ключ корови та значення 1 буде вставлено на карту.
- Вставте значення в карту my_map. Ключ Cat і значення 2 буде вставлено на карту.
- Додайте значення 3 на карту my_map ключем лева.
- Створіть ітератор для ітерації по карті my_map, шукаючи ключового кота.
- Видаліть елемент, на який вказує ітератор.
- Використовуйте ітератор для перебору елементів карти my_map від початку до кінця.
- Роздрукуйте вміст карти my_map на консолі.
- Після успішного завершення програма повинна повертати результати.
- Кінець тіла основної () функції.
Короткий зміст:
- Карта - це асоціативний контейнер, який зберігає елементи у відображеному вигляді.
- Кожен елемент на карті має значення ключа та відображене значення.
- На карті два зіставлені значення не можуть спільно використовувати ключові значення.
- Ключові значення допомагають в сортуванні та ідентифікації елементів однозначно.
- Зіставлені значення допомагають зберігати вміст, пов'язаний з ключем.
- Карта С ++ зберігає унікальні ключі у відсортованому порядку.
- Для роботи з картою C ++ ми створюємо ітератор для перебору елементів.
- За допомогою ітератора ми можемо виконувати такі завдання, як пошук та видалення об’єктів з карти.