Контейнер map: функции insert(), emplace(), lower_bound(), upper_bound()

Поскольку, мы уже сталкивались с функцией map::insert(), в следующем примере, я покажу, альтернативные варианты добавления элементов в контейнер multimap и map, например:
Результат работы программы можете получить, просто нажав на кнопку Run на сайте ;)
В программе показано три варианта заполнения контейнера multimap и map.
- Вариант №1 — или самый распространенный вариант. В строке 11 и 12 с помощью функции
map:: insert(), мы добавляем элементы вmap. Функция принимает два аргумента, первый аргументключ, у нас это типstring, второй этозначение, у нас это типfloat. Строки 13 и 14 идентичны строками 11 и 12, но там элементы добавляются вmultimap. - Вариант №2 — с использованием итератора. В строке 17 создаем итератор
itMultimapExample, в строке 18, итераторitMapExample. Функцииmap::insert(), в строке 19 мы передаем два аргумента (первым аргументом выступает наш итераторitMapExample, а вторым, параключ,значение). Строка 20 равносильна строке 19, только там функцияmap::insert(), применяется к контейнеруmultimap. Может возникнуть вопрос, чем первый вариант отличается от второго? Ответ, тем, что нашим итератором мы рекомендуем позицию, с которой следует начинать поиск позиции элемента, который мы хотим вставить. - Вариант №3 — с использованием функции map::find(). В строке 23, 24 объявляем еще один контейнер
mapиmultimap. Строку 25 можно прочитать так: заполняй контейнерmyMapExampleDifferent, начиная с началаmyMapExample, пока в контейнереmyMapExampleне встретишь ключTable. Этот ключ не будет вставлен вmyMapExample. Строка 26 выполняет предыдущее действие, но применительно кmultimapконтейнеру. Вывод на экранmyMapExampleиmyMultimapExampleосуществляется в строках 30-33, а выводmyMapExampleDifferentиmyMultimapExampleDifferentстроках 38-41 .
Multimap кроме функции map::insert(), поддерживает еще функцию map::emplace(), рассмотрим пример:
Также при запуске кода вы можете увидеть работу программы =)
В строках 11-14 происходит заполнение контейнера multimap, в строках 17-20 происходит заполнение контейнера map. В строке 23 встречается функция map::emplace(), которая равносильна функции map::insert, но ей не нужно, явно, каждый раз, указывать тип переменной. В строках 26-29 осуществляет вывод на экран контейнера multimap. Контейнер map не поддерживает функцию map::emplace(). В строке 31 мы встречаем функцию map::lower_bound(). Эта функция принимает только один аргумент и возвращает первую позицию в которую может быть вставлен этот элемент. С помощью функции map::lower_bound(), создаем итератор, указывающий на ключ g в контейнере map. В 32 строке мы встречаем функцию map::upper_bound(), она возвращает последнюю позицию , в которую может быть вставлен элемент. В строке 32 создаем еще один итератор, но уже с помощью функции map::upper_bound() и указывающий на ключ i. В строках 33, 34, выполняется тоже, но с контейнером multimap. Данные итераторы выступают в роли «границ», где при помощи map::erase() в строке 38, 39, мы очищаем оба контейнера (границы контейнеров, тоже стираются). Что осталось в контейнерах, показано в строках 43-46, где осуществляется вывод на экран.
На сегодня всё ;)
Ваш developer