std::unordered_set<Key,Hash,KeyEqual,Allocator>::emplace
template< class... Args > std::pair<iterator, bool> emplace( Args&&... args ); | (начиная с C++11) |
Вставляет в контейнер новый элемент, сконструированный на месте с заданным args, если в контейнере нет элемента с таким ключом.
Конструктор нового элемента вызывается с теми же аргументами, которые передаются в emplace, пересылаемыми через std::forward<Args>(args).... Элемент может быть сконструирован, даже если в контейнере уже есть элемент с таким ключом; в этом случае только что сконструированный элемент будет немедленно уничтожен.
Умелое использование emplace позволяет сконструировать новый элемент, избегая ненужных операций копирования или перемещения.
Если после операции новое количество элементов превышает прежнее значение max_load_factor() * bucket_count(), выполняется перехеширование.
Если происходит перехеширование (вследствие вставки), все итераторы становятся недействительными. В противном случае (если перехеширования нет) итераторы остаются действительными.
Параметры
| args | - | аргументы для передачи конструктору элемента |
Возвращаемое значение
Пара, состоящая из итератора на вставленный элемент (или на элемент, помешавший вставке) и значения bool, равного true тогда и только тогда, когда произошла вставка.
Исключения
Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта (гарантия строгой безопасности при исключениях).
Сложность
В среднем амортизированная константная, в худшем случае линейная относительно размера контейнера.
Пример
См. также
| конструирует элементы на месте, используя подсказку (открытая функция-член) |
|
| вставляет элементы или узлы(начиная с C++17) (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/unordered_set/emplace