Spec-Zone.ru › C++

std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::insert

Определено в заголовочном файле <unordered_map>
iterator insert( const value_type& value );
(1) (начиная с C++11)
iterator insert( value_type&& value );
(2) (начиная с C++17)
template< class P >
iterator insert( P&& value );
(3) (начиная с C++11)
iterator insert( const_iterator hint, const value_type& value );
(4) (начиная с C++11)
iterator insert( const_iterator hint, value_type&& value );
(5) (начиная с C++17)
template< class P >
iterator insert( const_iterator hint, P&& value );
(6) (начиная с C++11)
template< class InputIt >
void insert( InputIt first, InputIt last );
(7) (начиная с C++11)
void insert( std::initializer_list<value_type> ilist );
(8) (начиная с C++11)
iterator insert( node_type&& nh );
(9) (начиная с C++17)
iterator insert( const_iterator hint, node_type&& nh );
(10) (начиная с C++17)

Вставляет элемент или элементы в контейнер.

1-3) Вставляет value.
Перегрузка (3) эквивалентна emplace(std::forward<P>(value)) и участвует в разрешении перегрузки только в том случае, если std::is_constructible<value_type, P&&>::value == true.
4-6) Вставляет value, используя hint в качестве необязательной подсказки, указывающей, с какого места следует начать поиск.
Перегрузка (6) эквивалентна emplace_hint(hint, std::forward<P>(value)) и участвует в разрешении перегрузки только в том случае, если std::is_constructible<value_type, P&&>::value == true.
7) Вставляет элементы из диапазона [first, last).
Если [first, last) не является допустимым диапазоном или если first и/или last являются итераторами в *this, поведение не определено.
8) Вставляет элементы из списка инициализации ilist.
9) Если nh — пустой дескриптор узла, ничего не делает. В противном случае вставляет принадлежащий nh элемент в контейнер и возвращает итератор, указывающий на вставленный элемент. Поведение не определено, если nh не пуст и get_allocator() != nh.get_allocator().
10) Если nh — пустой дескриптор узла, ничего не делает и возвращает конечный итератор. В противном случае вставляет принадлежащий nh элемент в контейнер и возвращает итератор, указывающий на элемент с ключом, эквивалентным nh.key(). hint используется в качестве необязательной подсказки, указывающей, с какого места следует начать поиск. Поведение не определено, если nh не пуст и get_allocator() != nh.get_allocator().

Если после выполнения операции новое количество элементов превышает старое значение max_load_factor() * bucket_count(), происходит перехеширование.
Если происходит перехеширование (вследствие вставки), все итераторы становятся недействительными. В противном случае (перехеширования нет) итераторы остаются действительными. Если вставка выполнена успешно, указатели и ссылки на элемент, полученные, когда он находился в дескрипторе узла, становятся недействительными, а указатели и ссылки на этот элемент, полученные до его извлечения, становятся действительными.(начиная с C++17)

Параметры

hint - итератор, используемый в качестве подсказки о том, куда вставить содержимое
value - значение вставляемого элемента
first, last - пара итераторов, определяющая исходный диапазон вставляемых элементов
ilist - список инициализации, из которого вставляются значения
nh - совместимый дескриптор узла
Требования к типам
-InputIt должен соответствовать требованиям LegacyInputIterator.

Возвращаемое значение

1-6) Итератор на вставленный элемент.
7,8) (нет)
9,10) Конечный итератор, если nh был пуст; в противном случае итератор, указывающий на вставленный элемент.

Исключения

1-6) Если по какой-либо причине выбрасывается исключение, эти функции не оказывают никакого эффекта (строгая гарантия безопасности при исключениях).
7,8) Гарантия безопасности при исключениях не предоставляется.
9,10) Если по какой-либо причине выбрасывается исключение, эти функции не оказывают никакого эффекта (строгая гарантия безопасности при исключениях).

Сложность

1-6) В среднем: O(1), в худшем случае O(size()).
7,8) В среднем: O(N), где N — количество вставляемых элементов. В худшем случае: O(N * size() + N).
9,10) В среднем: O(1), в худшем случае O(size()).

Пример

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.

DR Применён к Поведение согласно опубликованной версии Корректное поведение
LWG 2005 C++11 перегрузки (3,6) участвовали в разрешении
перегрузки только если P неявно преобразуемо в value_type
участвует только если value_type
может быть сконструировано из P&&

См. также

emplace
создаёт элемент на месте
(открытая функция-член)
emplace_hint
создаёт элементы на месте, используя подсказку
(открытая функция-член)
inserter
создаёт std::insert_iterator типа, выводимого из аргумента
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/unordered_multimap/insert

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API