Метод insert_or_assign
Метод insert_or_assign класса map вставляет новый элемент
в контейнер, если переданного ключа в нём ещё нет, либо заменяет
значение существующего элемента, если такой ключ уже присутствует.
В первом параметре мы передаём ключ, а во втором - значение, которое
нужно вставить или присвоить. Метод возвращает пару pair,
первый элемент которой является итератором на вставленный или
обновлённый элемент, а второй - флагом bool, который равен
true, если элемент был вставлен, и false, если значение
было заменено.
Синтаксис
map.insert_or_assign(key, value)
Пример
Давайте создадим отображение и вставим в него новый элемент
с ключом 1, а затем проверим результат:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, string> m;
auto res = m.insert_or_assign(1, "abcde");
cout << res.first->first << " " << res.first->second << " " << res.second << endl;
return 0;
}
Результат выполнения кода:
"1 abcde 1"
Пример
Теперь давайте попробуем присвоить новое значение уже
существующему ключу 1 и посмотрим, что вернёт метод:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, string> m;
m.insert_or_assign(1, "abcde");
auto res = m.insert_or_assign(1, "12345");
cout << res.first->first << " " << res.first->second << " " << res.second << endl;
return 0;
}
Результат выполнения кода:
1 12345 0
Как видите, значение было заменено, а второй элемент пары
равен false, что говорит о том, что вставки не произошло.
Пример
Давайте переберём все элементы отображения после нескольких вызовов метода:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, string> m;
m.insert_or_assign(1, "abcde");
m.insert_or_assign(2, "12345");
m.insert_or_assign(1, "12345");
for (auto &el : m) {
cout << el.first << " " << el.second << endl;
}
return 0;
}
Результат выполнения кода:
1 12345
2 12345