Контейнер Map (Введение)

Контейнер map, очень похож на остальные контейнеры, такие как vector, list, deque, но с небольшим отличием. В этот контейнер можно помещать сразу два значения. Если у Вас когда-то была мечта написать свой словарь, то лучше чем map, вам альтернативы не найти. И так, что же такое этот map, давай рассмотрим более подробнее на примере:

Пример выполнения программы:

Во 2 строке мы подключили библиотеку для работы с map. В строках 7-10 происходит явное объявление map, это объявление ничем не отличается от объявления векторов, массивов, за исключением того, что объявляются сразу два типа переменных (первый тип – string, второй тип — int). В кавычках объявляются строки, а через запятую соответствующее строке число. Если бы написали вместо string тип char, то объявление было-бы таким:
map <char,int> myFirstMap= {{ 'm', 37 },
{ 'f', 40 },
{ 'b', 15 },
{ 's', 20 }};
Нужно добавить, что map можно использовать в виде ассоциативного массива. Массива который позволяет в себе хранить пару вида («ключ», «значение»), а так-же добавлять и удалять пары по ключу. У нас в роли ключа выступает тип string, а в роли значения тип int.
Осуществление вывода ничем не отличается от вывода тех же векторов. Обратите внимание, что вывод осуществляется в алфавитном порядке, а заполнение map в строках 7-10, нет. Контейнер map сам выполняет сортировку по алфавиту. В строках 13-16 осуществляется вывод с помощью итератора it. Итератор it сначала указывает на начало map и с каждой новой итерацией увеличивается, пока не достигнет конца map. Самое интересное располагается в строке 15. Запись вида it->first означает, что it при первой итерации указывает на строку Mother, потом на Father и так далее до конца цикла, соответственно, запись вида it->second означает, что it при первой итерации указывает на число 37, потом на 40 и так далее.
В строке 19 мы объявили map mySecondMap. В строках 20-23 заполняем его. Строка 22 содержит функцию map::insert(). Которая вставляет элементы в map. Запись вида pair<char,int>(c,i) означает, что в map помещаются две переменные типа char и int (первая – char, вторая — int), где типу char соответствует переменная c, а типу int соответствует переменная i. В строке 20 при каждой новой итерации наши переменные будут увеличиваться, т. е. сначала i=0, c=a, при следующей итерации i=1, c=b и т. д. В строке 28 показан альтернативный вывод map с помощью указателей. У map есть один небольшой недостаток, она не может содержать два одинаковых значения, но multimap решает эту проблему, пример:

Пример выполнения программы:

Работа программы должна быть полностью понятна, так, что на ней останавливаться не будем. Как видите контейнер myFirstMap может содержать только одно не повторяющееся значение <char, int>, а multimap нет. С этой целью и был создан контейнер multimap. Multimap ничем не отличается от map, за исключением того, что в нем можно хранить повторяющиеся элементы. Думаю, для начала достаточно.
Всем удачи в разработке ;)
Ваш developer