Метод insert
Метод insert класса map используется для добавления новых пар ключ-значение в контейнер. Если ключ уже существует в контейнере, вставка не происходит (для map, в отличие от multimap). В первый параметр мы передаем пару value_type или объект pair, содержащий ключ и значение, а во второй (опционально) - подсказку итератора для оптимизации вставки. Метод возвращает пару, состоящую из итератора на вставленный (или существующий) элемент и булева значения, указывающего, была ли вставка успешной.
Синтаксис
// Вставка одной пары
pair<iterator, bool> insert(const value_type& value);
// Вставка с подсказкой
iterator insert(iterator hint, const value_type& value);
// Вставка диапазона
template<class InputIt>
void insert(InputIt first, InputIt last);
Пример
Давайте создадим map и добавим в него несколько элементов с помощью метода insert:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int, string> mp;
mp.insert({1, "abcde"});
mp.insert({2, "12345"});
mp.insert({3, "hello"});
for (const auto& [key, value] : mp)
{
cout << key << ": " << value << endl;
}
return 0;
}
Результат выполнения кода:
"1: abcde"
"2: 12345"
"3: hello"
Пример
Давайте проверим, что произойдет, если попытаться вставить элемент с уже существующим ключом:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int, string> mp;
auto res = mp.insert({1, "abcde"});
cout << "First insert: " << res.second << endl;
res = mp.insert({1, "12345"});
cout << "Second insert: " << res.second << endl;
cout << "Value: " << res.first->second << endl;
return 0;
}
Результат выполнения кода:
"First insert: 1"
"Second insert: 0"
"Value: abcde"
Пример
Давайте вставим диапазон элементов из другого контейнера:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int, string> src = {{1, "abcde"}, {2, "12345"}};
map<int, string> dst;
dst.insert(src.begin(), src.end());
dst.insert({3, "hello"});
for (const auto& [key, value] : dst)
{
cout << key << ": " << value << endl;
}
return 0;
}
Результат выполнения кода:
"1: abcde"
"2: 12345"
"3: hello"
Смотрите также
-
метод
emplace,
который вставляет элемент на месте -
метод
insert_or_assign,
который вставляет или обновляет элемент -
метод
erase,
который удаляет элементы из map -
метод
find,
который ищет элемент по ключу