STL. MAP/MULTIMAP Ассоциативные контейнеры
MAP реализует алгоритмы бинарного дерева, но работает с парами значений (ключ + доп. значение).
Для работы с map/multimap необходимо подключить библиотеку
#include <map>
Map входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std;
Главным отличием map от set является возможность работы с парами значений, первое из которых является ключом, а второе – собственно интересующим нас значением.
Действительно, при работе с set/multiset мы могли работать только с целочисленными значениями (в классическом варианте) или классами у которых перегружен оператор сравнения, в map мы можем использовать первое значение (число) как идентификатор и по нему выполнять формирование дерева/сортировку, а второе использовать как «полезную нагрузку».
По сути — контейнер map использует объявленный в C++ стандартный класс pair, позволяющий объединять пары чисел и работать с ними как с едиными данными.
Функции и смысл примерно такой же как у set/multiset.
map<int, string> myMap;
myMap.insert(make_pair(2, “Name2”));
myMap.insert(pair<int,string>(3, “Name3”));
myMap.emplace(1, “Name1”); //создание элемента с id 1 и полем «Name1»
Среди представленных выше вариантов метод myMap.emplace в теории менее ресурсозатратный, т.к. не предполагает создание промежутка в виде класса pair.
Map и multimap
Map и multimap имеют различия как set/multiset, т.е. multimap может иметь повторяющиеся ключи, также у multimap НЕ перегружен оператор [] и отсутствует метод .at() т.к. возникает неоднозначность.