std::flat_multimap<Key,T,Compare,KeyContainer,MappedContainer>:: emplace
|
template
<
class
...
Args
>
iterator emplace ( Args && ... args ) ; |
(начиная с C++23)
(constexpr начиная с C++26) |
|
Вставляет новый элемент в контейнер, созданный на месте с заданными args .
Инициализирует объект t типа std:: pair < key_type, mapped_type > с помощью std:: forward < Args > ( args ) ... ; если отображение уже содержит элемент, чей ключ эквивалентен t. first , * this остаётся без изменений. В противном случае эквивалентно:
auto key_it = ranges::upper_bound(c.keys, t.first, compare); auto value_it = c.values.begin() + std::distance(c.keys.begin(), key_it); c.keys.insert(key_it, std::move(t.first)); c.values.insert(value_it, std::move(t.second));
Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < std:: pair < key_type, mapped_type > , Args... > равно true .
Если
value_type
не является
EmplaceConstructible
в
flat_multimap
из
args
, поведение не определено.
| Информация о недействительности итераторов скопирована отсюда |
Содержание |
Параметры
| args | - | аргументы для передачи конструктору элемента |
Возвращаемое значение
Итератор на вставленный элемент.
Исключения
Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( strong exception safety guarantee ).
Сложность
Линейно по размеру контейнера
Примечания
Аккуратное использование
emplace
позволяет создавать новый элемент, избегая ненужных операций копирования или перемещения.
Пример
#include <iostream> #include <string> #include <utility> #include <flat_map> int main() { std::flat_multimap<std::string, std::string> m; // использует перемещающий конструктор pair m.emplace(std::make_pair(std::string("a"), std::string("a"))); // использует преобразующий перемещающий конструктор pair m.emplace(std::make_pair("b", "abcd")); // использует шаблонный конструктор pair m.emplace("d", "ddd"); // emplace с дублирующимся ключом m.emplace("d", "DDD"); // использует поэлементный конструктор 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
Смотрите также
|
создаёт элементы на месте с использованием подсказки
(публичная функция-член) |
|
|
вставляет элементы
(публичная функция-член) |