std::multimap<Key,T,Compare,Allocator>:: emplace
|
template
<
class
...
Args
>
iterator emplace ( Args && ... args ) ; |
(начиная с C++11)
(constexpr начиная с C++26) |
|
Вставляет новый элемент в контейнер, созданный на месте с заданными args .
Конструктор нового элемента (т.е.
std::
pair
<
const
Key, T
>
) вызывается с точно такими же аргументами, которые передаются в
emplace
, проброшенными через
std::
forward
<
Args
>
(
args
)
...
.
Если
value_type
не является
EmplaceConstructible
в
multimap
из
args
, поведение не определено.
Никакие итераторы или ссылки не инвалидируются.
Содержание |
Параметры
| args | - | аргументы для передачи конструктору элемента |
Возвращаемое значение
Итератор на вставленный элемент.
Исключения
Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).
Сложность
Логарифмическая от размера контейнера.
Примечания
Аккуратное использование
emplace
позволяет создавать новый элемент, избегая ненужных операций копирования или перемещения.
Пример
#include <iostream> #include <string> #include <utility> #include <map> int main() { std::multimap<std::string, std::string> m; // использует move-конструктор pair m.emplace(std::make_pair(std::string("a"), std::string("a"))); // использует converting move-конструктор pair m.emplace(std::make_pair("b", "abcd")); // использует шаблонный конструктор pair m.emplace("d", "ddd"); // emplace с дублирующимся ключом m.emplace("d", "DDD"); // использует piecewise-конструктор pair m.emplace(std::piecewise_construct, std::forward_as_tuple("c"), std::forward_as_tuple(10, 'c')); for (const auto& p : m) std::cout << p.first << " => " << p.second << '\n'; }
Вывод:
a => a b => abcd c => cccccccccc d => ddd d => DDD
Смотрите также
|
(C++11)
|
создаёт элементы на месте с использованием подсказки
(public member function) |
|
вставляет элементы
или узлы
(since C++17)
(public member function) |