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