std::flat_set<Key,Compare,KeyContainer>:: insert
From cppreference.net
|
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)
Вставляет
value
в позицию, максимально близкую к позиции непосредственно перед
pos
. Эквивалентно
return
emplace_hint
(
pos, std
::
move
(
value
)
)
;
.
5,7)
Если
*
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)
Если при выполнении любой операции возникает исключение, вставка не производится.
|
Этот раздел не завершён
Причина: случаи 6,8-10 |
Сложность
3-5)
Амортизированная константа, если вставка происходит в позицию непосредственно перед
pos
, логарифмическая по
size()
в остальных случаях. Плюс стоимость вставки в
c
.
Примечания
Подсказанная вставка
(
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()); // это валидный итератор assert(*result_1.first == 3); if (result_1.second) std::cout << "вставка выполнена\n"; auto result_2 = set.insert(3); assert(result_2.first == result_1.first); // тот же итератор assert(*result_2.first == 3); if (!result_2.second) std::cout << "вставка не выполнена\n"; }
Вывод:
вставка выполнена вставка не выполнена
Смотрите также
|
создаёт элемент на месте
(публичная функция-член) |
|
|
создаёт элементы на месте с использованием подсказки
(публичная функция-член) |
|
|
создаёт
std::insert_iterator
типа, выведенного из аргумента
(шаблон функции) |