map — контейнер STL, що зберігає набір даних формату ключ - значення (інша назва - асоціативний масив. При цьому ключами можуть бути будь-які об'єкти, які задовільняють умову унікальності ключів. В подібному контейнері multimap (STL) можуть зберігатися елементи, що адресуються ключами серед яких допускаються повтори.

Асоціативні контейнери, в тому числі map, особливо ефективні для доступу до елементів за їх ключем, на відміну від послідовних контейнерів, які більш ефективні для отримання доступу до елементів по їх порядковому індексу. Асоціативні контейнери гарантовано виконують операції вставки, видалення і пошуку елементу за логарифмічний час - O(log n). Як правило вони реалізується за допомогою одного з різновидів бінарного збалансованого дерева і підтримують двосторонню ітерацію.

Для контейнера map використовуються ітератори, що вказують на конкретні елементи в контейнері. Використовуючи такий ітератор можна отримати і ключ і відповідний йому елемент.

Приклад використання Найкраще зрозуміти застосування асоціативних масивів на прикладі: #include <iostream> #include <map>// Заголовок в якому знаходиться map #include <string>

using namespace std;

int main() { map<string,int> months;//Оголошуємо асоціативний масив з ключами - рядками, і цілими даними. months["січень"]=1; months["лютий"]=2;

// ... // Заради економії місця пропущено тепліші місяці

months["грудень"]=12;

map<string,int>::iterator it; // Ітератор по контейнеру for(it=months.begin();it!=months.end();it++) //Виводимо всі

cout << it->first << " " << it->second << endl;// Ітератор це пара: ключ, значення // Ключ в полі first, а значення у полі second

it=months.find("березень"); cout << "Виберемо місяць " << it->first << endl; it++; cout << "Наступний за ним: " << it->first;

return 0; }

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

Посилання