Map (STL)
map — контейнер STL, що зберігає набір даних формату ключ - значення (інша назва - асоціативний масив. При цьому ключами можуть бути будь-які об'єкти, які задовільняють умову унікальності ключів. В подібному контейнері multimap (STL) можуть зберігатися елементи, що адресуються ключами серед яких допускаються повтори.
Стандартна бібліотека C++ |
---|
Стандартна бібліотека шаблонів |
|
Стандартна бібліотека С |
|
Асоціативні контейнери, в тому числі map, особливо ефективні для доступу до елементів за їх ключем, на відміну від послідовних контейнерів, які більш ефективні для отримання доступу до елементів по їх порядковому індексу. [1] Асоціативні контейнери гарантовано виконують операції вставки, видалення і пошуку елементу за логарифмічний час - 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;
}
Важливо зауважити, що дані в асоціативному масиві автоматично відсортовані за ключем, а не в порядку додавання, тому програма описана вище дає такий вивід:
Виберемо місяць березень Наступний за ним: вересень
Посилання
- ISO/IEC 14882:2011 draft specification. p. 797, § 23.4.4.