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

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


Поскольку, мы уже сталкивались с функцией map::insert(), в следующем примере, я покажу, альтернативные варианты добавления элементов в контейнер multimap и map, например:

https://ideone.com/Z4gjBL

Результат работы программы можете получить, просто нажав на кнопку 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(), рассмотрим пример:

https://ideone.com/8ipctV

Также при запуске кода вы можете увидеть работу программы =)

В строках 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


Report Page