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/w/cpp/container/unordered_multimap/insert

Spec-Zone.ru

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