11. STL. MAP/MULTIMAP Ассоциативные контейнеры

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() т.к. возникает неоднозначность.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *