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) |
Вставляет элемент(ы) в контейнер.
value.emplace(std::forward<P>(value)) и участвует в разрешении перегрузки только если std::is_constructible<value_type, P&&>::value == true.value, используя hint в качестве неявного указания на то, с чего следует начать поиск.emplace_hint(hint, std::forward<P>(value)) и участвует в разрешении перегрузки только если std::is_constructible<value_type, P&&>::value == true.[first, last).[first, last) не является валидным диапазоном, или first и/или last являются итераторами в *this, поведение не определено.ilist.nh — пустой дескриптор узла, ничего не делает. В противном случае, вставляет элемент, принадлежащий nh, в контейнер и возвращает итератор, указывающий на вставленный элемент. Поведение не определено, если nh не пусто и get_allocator() != nh.get_allocator().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. |
||
Возвращаемое значение
nh был пустым, иначе итератор, указывающий на вставленный элемент.Исключения
Сложность
O(1), наихудший случай O(size()).O(N), где N — количество элементов для вставки. Наихудший случай: O(N * size() + N).O(1), наихудший случай O(size()).Пример
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 2005 | C++11 | перегрузки (3,6) участвовали бы в разрешении перегрузки только если P неявно преобразуется в value_type | участвует только если value_typeможно сконструировать из P&& |
См. также
| создаёт элемент на месте (публичный член-функция) |
|
| создаёт элементы на месте, используя подсказку (публичный член-функция) |
|
создаёт 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