Карта в C++ Стандартна бібліотека шаблонів (STL)
⚡ Розумний підсумок
Карта в C++ — це асоціативний контейнер зі стандартної бібліотеки шаблонів, який зберігає елементи як відсортовані пари ключ-значення, де кожен унікальний ключ відповідає одному значенню та забезпечує швидкий пошук, вставку та впорядкований обхід.

Що таке Карта C++?
In C++MAP – це асоціативний контейнер, що зберігає елементи у відображеній формі. Кожен елемент на карті складається з ключового значення та відображеного значення. Два відображених значення не можуть мати однакові ключові значення.
Ключові значення корисні для сортування та унікальної ідентифікації елементів, тоді як зіставлені значення зберігають вміст, пов'язаний з кожним ключем. Вони можуть відрізнятися за типом, але тип члена об'єднує їх у пару, яка містить обидва.
Перш ніж писати будь-який код, корисно знати, чому карта часто є правильним контейнером для використання.
Навіщо використовувати std::map?
Ось причини використання карти:
- std::map зберігає лише унікальні ключі, відсортовані на основі вибраних критеріїв сортування.
- Пошук елементів за допомогою ключа здійснюється легко та швидко.
- До кожного ключа кріпиться лише один елемент.
- std::map можна використовувати як асоціативний масив.
- std::map можна реалізувати за допомогою збалансованих бінарних дерев.
Щоб скористатися цими перевагами, почніть із синтаксису оголошення.
синтаксис
Щоб оголосити std::map, використовуйте цей синтаксис:
std::map<key_datatype, value_datatype>map_name;
- Команда тип_ключових_даних позначає тип даних ключів карти.
- Команда тип_даних_значення позначає тип даних значень, що відповідають ключам карти.
- Команда map_name це назва карти.
Наприклад:
map<string, int> my_map;
Ми оголосили карту з назвою my_map. Карта матиме рядок як тип даних ключа та ціле число як тип даних values.
Типи учасників
Функції-члени можуть використовувати такі типи членів як параметри або тип повернення:
- key_type: Ключ (перший параметр у шаблоні)
- зіставлений_тип: T (другий параметр у шаблоні)
- key_compare: Порівняння (третій параметр у шаблоні)
- allocator_type: Alloc (четвертий параметр у шаблоні)
- value_type: пара
- value_compare: Клас вкладеної функції для порівняння елементів
- довідка: allocator_type::reference
- const_reference: allocator_type::const_reference
- покажчик: allocator_type::pointer
- const_pointer: allocator_type::const_pointer
- ітератор: двонаправлений ітератор до value_type
- const_iterator: двонаправлений ітератор для const value_type
- reverse_iterator: зворотний ітератор
- const_reverse_iterator: постійний зворотний ітератор
- тип_різниці: ptrdiff_t
- size_type: size_t
Вбудовані функції std::map
std::map містить вбудовані функції. Деякі з них включають:
- почати () – Ця функція повертає ітератор до першого елемента карти.
- розмір () – Ця функція повертає кількість елементів на карті.
- порожній() – Ця функція повертає логічне значення, яке вказує, чи є карта порожньою.
- вставка(пара(ключ, значення)) – Ця функція вставляє нову пару ключ-значення в карту.
- знайти(значення) – Ця функція повертає ітератор елементу val, якщо він знайдений. В іншому випадку вона повертає m.end().
- стерти (позиція ітератора) – Ця функція видаляє елемент у позиції, на яку вказує ітератор.
- стерти (const g) – Ця функція видаляє парі ключ-значення g з карти.
- ясно () – Ця функція видаляє всі елементи з карти.
Після визначення функцій, наступні приклади застосують їх у дії, починаючи з ітерації.
Ітерація елементів карти
Ви можете перебирати елементи карти. Нам просто потрібно створити ітератор і використовувати його для цього. Наприклад:
Приклад 1
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); cout << "Map size is: " << Students.size() << endl; cout << endl << "Default map Order is: " << endl; for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть файл заголовка рядка в наш код, щоб використовувати його функції.
- Включіть файл заголовка карти в наш код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Виклик функції main(). { позначає початок тіла функції.
- Створіть карту під назвою Students, де ключі будуть цілими числами, а значення – рядками.
- Вставте значення на карту Учні. На карту буде вставлено ключ 200 і значення Аліси.
- Вставте значення на карту Учні. На карту буде вставлено ключ 201 і значення Джон.
- Використайте функцію size(), щоб отримати розмір карти з назвою Students. Вона має повернути значення 2.
- Надрукуйте текст на консолі.
- Використовуйте цикл for, щоб створити ітератор із назвою it для повторення елементів карти під назвою Students.
- Вивести значення карти Учні на консоль.
- Кінець тіла циклу for.
- Кінець тіла функції main().
Вставлення даних у std::map
Ви можете вводити елементи в std::map за допомогою функції insert(). Пам'ятайте, що ключі std::map мають бути унікальними.
Отже, спочатку перевіряється, чи кожен ключ присутній у мапі. Якщо він присутній, запис не буде вставлено, але повертається ітератор для існуючого запису. Якщо його немає, запис буде вставлено.
Функція має наступні варіанти:
- вставка (пара) – у цьому варіанті пара ключ-значення вставляється в карту.
- вставка(початковий_ітермін, кінцевий_ітермін) – у цьому варіанті записи будуть вставлені в діапазон, визначений start_itr та end_itr з іншої карти.
Функція insert_or_assign() працює так само, як і функція insert(), але якщо заданий ключ вже існує в мапі, його значення буде змінено.
Приклад 2
#include <map> #include <iostream> using namespace std; int main() { map<int, int> m{ {1,3} , {2,4} , {3,5} }; m.insert({ 5, 6 }); m.insert({ 1, 8 }); m.insert_or_assign(1, 6); cout << "Key\tElement\n"; for (auto itr = m.begin(); itr != m.end(); ++itr) { cout << itr->first << '\t' << itr->second << '\n'; } return 0; }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка карти в наш код, щоб використовувати його функції.
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Виклик функції main(). { позначає початок тіла функції.
- Створіть карту з назвою m, де ключі будуть цілими числами, а значення – цілими числами. На карті зроблено три записи.
- Вставте новий запис на карту m. На карту буде вставлено ключ 5 і значення 6.
- Спроба зробити запис у вже існуючий ключ. Оскільки ключ 1 вже існує на карті, запис не буде зроблено.
- Використання функції insert_or_assign() для вставки або зміни існуючого запису. Оскільки ключ 1 вже існує, його значення буде змінено на 6.
- Надрукуйте текст на консолі. Символ «\t» створює горизонтальний пробіл, а символ «\n» переміщує курсор миші на наступний рядок.
- Використовувати для петлі щоб створити ітератор з іменем itr для перебору елементів карти з іменем m.
- Вивести на консоль значення карти m. Символ «\t» створює горизонтальний пробіл між кожним ключем і його відповідним значенням. Навпаки, символ «\n» переміщує курсор миші на наступний рядок після кожної ітерації.
- Кінець тіла циклу for.
- Після успішного завершення програма повинна повернути значення.
- Кінець тіла функції main().
Пошук на карті
Ми можемо використовувати функцію find() для пошуку елементів у мапі за їхніми ключами. Якщо ключ не знайдено, функція повертає std::map::end. В іншому випадку буде повернуто ітератор шуканого елемента.
Приклад 3
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); std::map<int, string>::iterator it = Students.find(201); if (it != Students.end()) { std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n'; } }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції без помилок.
- Включіть файл заголовка рядка в наш код, щоб використовувати його функції без помилок.
- Включіть файл заголовка карти в наш код, щоб використовувати його функції без помилок.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Викличте функцію main(). { позначає початок тіла функції main().
- Створіть карту під назвою Students, ключі якої будуть цілими числами, а значення – рядками.
- Вставте значення на карту Учні. На карту буде вставлено ключ 200 і значення Аліси.
- Вставте значення на карту Учні. На карту буде вставлено ключ 201 і значення Джон.
- Знайдіть значення, пов’язане з ключем 201.
- Використовуйте оператор if, щоб перевірити, чи знайдено значення для ключа.
- Надрукуйте значення ключа поруч із текстом на консолі.
- Кінець тіла оператора if.
- Кінець тіла функції main().
Видалення даних з карти
Ми можемо використовувати функцію erase() для видалення значення з карти. Ми просто створюємо ітератор, який вказує на елемент, який потрібно видалити. Потім ітератор передається до функції erase().
Приклад 4
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<std::string, int> my_map; my_map.insert(std::make_pair("cow", 1)); my_map.insert(std::make_pair("cat", 2)); my_map["lion"] = 3; map<std::string, int>::iterator it = my_map.find("cat"); my_map.erase(it); for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it) cout << (*it).first << ": " << (*it).second << endl; return 0; }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть файл заголовка рядка в наш код, щоб використовувати його функції.
- Включіть файл заголовка карти в наш код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Викличте функцію main(). { позначає початок тіла функції main().
- Створіть карту з назвою my_map, ключами якої будуть рядки, а значеннями – цілі числа.
- Вставте значення в карту my_map. На карту буде вставлено ключ корови та значення 1.
- Вставте значення в карту my_map. На карту буде вставлено ключ Cat і значення 2.
- Додайте значення 3 на карту my_map з ключем лева.
- Створіть ітератор для повторення карти my_map у пошуках ключа cat.
- Видалити елемент, на який вказує ітератор.
- Використайте ітератор для перебору елементів карти my_map від початку до кінця.
- Роздрукуйте вміст карти my_map на консолі.
- Після успішного завершення програма повинна повернути результат.
- Кінець тіла функції main().






