std::flat_set<Key,Compare,KeyContainer>::insert
std::pair<iterator, bool> insert( const value_type& value ); | (1) | (начиная с C++23) |
std::pair<iterator, bool> insert( value_type&& value ); | (2) | (начиная с C++23) |
iterator insert( const_iterator pos, const value_type& value ); | (3) | (начиная с C++23) |
iterator insert( const_iterator pos, value_type&& value ); | (4) | (начиная с C++23) |
template< class K > iterator insert( const_iterator pos, K&& x ); | (5) | (начиная с C++23) |
template< class InputIt > void insert( InputIt first, InputIt last ); | (6) | (начиная с C++23) |
template< class K > std::pair<iterator, bool> insert( K&& x ); | (7) | (начиная с C++23) |
template< class InputIt > void insert( std::sorted_unique_t, InputIt first, InputIt last ); | (8) | (начиная с C++23) |
void insert( std::initializer_list<key_type> ilist ); | (9) | (начиная с C++23) |
void insert( std::sorted_unique_t s, std::initializer_list<key_type> ilist ); | (10) | (начиная с C++23) |
Вставляет элемент или элементы в контейнер, если контейнер еще не содержит элемент с эквивалентным ключом.
1) Вставляет
value. Эквивалентно return emplace(value);.
2) Вставляет
value. Эквивалентно return emplace(std::move(value));.
3) Вставляет
value в позицию, максимально близкую к позиции непосредственно перед pos. Эквивалентно return emplace_hint(pos, value);.
4) Вставляет
5,7) Если value в позицию, максимально близкую к позиции непосредственно перед pos. Эквивалентно return emplace_hint(pos, std::move(value));.*this уже содержит элемент, прозрачно сравниваемый как эквивалентный x, ничего не делает. В противном случае вставляет новый элемент, как если бы было выполнено: -
(5)
emplace(pos, std::forward<K>(x))(в позицию, максимально близкую к позиции непосредственно передpos); -
(7)
emplace(std::forward<K>(x)).
Преобразование
Эти перегрузки участвуют в разрешении перегрузки только если x в key_type должно создавать объект u, для которого find(k) == find(u) является true. В противном случае поведение не определено.- квалифицированный идентификатор
Compare::is_transparentдопустим и обозначает тип, и -
std::is_constructible_v<value_type, K>являетсяtrue,
Key.
6) Эквивалентно последовательности операций:
- Вставляет элементы из диапазона
[first,last), как если бы было выполненоc.insert(c.end(), first, last);. - Сортирует диапазон вновь вставленных элементов относительно
compare. - Объединяет полученный отсортированный диапазон и отсортированный диапазон ранее существовавших элементов в один отсортированный диапазон. (Примечание: операция объединения может выделять память).
- Удаляет все элементы, кроме первого, из каждой группы идущих подряд эквивалентных элементов.
Если ключи нескольких элементов в диапазоне сравниваются как эквивалентные, не указано, какой именно элемент будет вставлен (ожидается рассмотрение LWG2844).
8) Вставляет элементы из диапазона
[first, last). Эквивалентно insert(first, last);.
Если ключи нескольких элементов в диапазоне сравниваются как эквивалентные, не указано, какой именно элемент будет вставлен (ожидается рассмотрение LWG2844).
9) Вставляет элементы из списка инициализации
ilist. Эквивалентно insert(ilist.begin(), ilist.end());.
Если ключи нескольких элементов в диапазоне сравниваются как эквивалентные, не указано, какой именно элемент будет вставлен (ожидается рассмотрение LWG2844).
10) Вставляет элементы из списка инициализации
ilist. Эквивалентно insert(s, ilist.begin(), ilist.end());.
Если ключи нескольких элементов в диапазоне сравниваются как эквивалентные, не указано, какой именно элемент будет вставлен (ожидается рассмотрение LWG2844).
Параметры
| pos | - | итератор на позицию, перед которой будет вставлен новый элемент |
| value | - | значение вставляемого элемента |
| first, last | - | пара итераторов, задающих исходный диапазон элементов для вставки |
| ilist | - | список инициализации, из которого берутся вставляемые значения |
| x | - | значение любого типа, которое можно прозрачно сравнить с ключом |
| s | - | тег для устранения неоднозначности, указывающий, что входная последовательность отсортирована (относительно compare) и содержит только уникальные элементы |
| Требования к типам | ||
-InputIt должен соответствовать требованиям LegacyInputIterator. |
||
Возвращаемое значение
1,2) Пара, состоящая из итератора на вставленный элемент (или на элемент, который помешал вставке) и значения bool, равного
true тогда и только тогда, когда вставка состоялась.
3-5) Итератор на вставленный элемент или на элемент, который помешал вставке.
6) (нет)
7) Пара, состоящая из итератора на вставленный элемент (или на элемент, который помешал вставке) и значения bool, равного
true тогда и только тогда, когда вставка состоялась.
8-10) (нет)
Исключения
1-5,7) Если любая операция выбрасывает исключение, вставка не оказывает никакого эффекта.
Сложность
1-5) Линейная относительно
size().
7) Линейная относительно
size().Примечания
Вставка с подсказкой (3-5) не возвращает логическое значение, чтобы сигнатура была совместима со вставкой по позиции в последовательные контейнеры, такие как std::vector::insert. Это позволяет создавать универсальные вставляющие итераторы, например std::inserter. Один из способов проверить успешность вставки с подсказкой — сравнить size() до и после операции.
Пример
#include <cassert>
#include <flat_set>
#include <iostream>
int main()
{
std::flat_set<int> set;
auto result_1 = set.insert(3);
assert(result_1.first != set.end()); // it is a valid iterator
assert(*result_1.first == 3);
if (result_1.second)
std::cout << "insert done\n";
auto result_2 = set.insert(3);
assert(result_2.first == result_1.first); // the same iterator
assert(*result_2.first == 3);
if (!result_2.second)
std::cout << "no insertion\n";
}
Вывод:
insert done no insertion
См. также
| создает элемент на месте (открытая функция-член) |
|
| создает элементы на месте, используя подсказку (открытая функция-член) |
|
создает std::insert_iterator, тип которого выводится из аргумента (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/flat_set/insert