Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: 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 P >
std:: pair < iterator, bool > insert ( P && x ) ;
(5) (начиная с C++23)
template < class P >
iterator insert ( const_iterator pos, P && x ) ;
(6) (начиная с C++23)
template < class InputIt >
void insert ( InputIt first, InputIt last ) ;
(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) Если * this уже содержит элемент, который прозрачно сравнивается эквивалентно с x , ничего не делает. В противном случае вставляет x в * this как если бы с помощью emplace ( std:: forward < P > ( x ) ) ; . Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < std:: pair < key_type, mapped_type > , P > равно true .
6) Если * this уже содержит элемент, который прозрачно сравнивается эквивалентно с x , ничего не делает. В противном случае вставляет x в * this в позицию, максимально близкую к позиции непосредственно перед pos . Эквивалентно return emplace_hint ( pos, std:: forward < P > ( x ) ) ; . Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < std:: pair < key_type, mapped_type > , P > равно true .
7) Вставляет элементы из диапазона [ first , last ) последовательно выполняя следующие операции:
  1. Добавляет элементы в c как если бы с помощью
    for ( ; first ! = last ; ++ first )
    {
    value_type value = * first ;
    c. keys . insert ( c. keys . end ( ) , std :: move ( value. first ) ) ;
    c. values . insert ( c. values . end ( ) , std :: move ( value. second ) ) ;
    }
  2. Сортирует диапазон вновь вставленных элементов относительно value_comp .
  3. Объединяет полученный отсортированный диапазон и отсортированный диапазон существующих элементов в единый отсортированный диапазон.
  4. Удаляет дубликаты элементов как если бы с помощью:
    auto zv = std :: views:: zip ( c. keys , c. values ) ;
    auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
    auto dist = std:: distance ( zv. begin ( ) , it ) ;
    c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
    c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
Может выделять память во время операции слияния на месте.
Если несколько элементов в диапазоне имеют эквивалентные ключи, не определено, какой элемент будет вставлен (в ожидании LWG2844 ).
8) Вставляет элементы из диапазона [ first , last ) как если бы выполнялись следующие операции последовательно:
  1. Добавляет элементы в c как если бы:
    for ( ; first ! = last ; ++ first )
    {
    value_type value = * first ;
    c. keys . insert ( c. keys . end ( ) , std :: move ( value. first ) ) ;
    c. values . insert ( c. values . end ( ) , std :: move ( value. second ) ) ;
    }
  2. Объединяет отсортированный диапазон вновь добавленных элементов и отсортированный диапазон существующих элементов в единый отсортированный диапазон.
  3. Удаляет дублирующиеся элементы как если бы:
    auto zv = std :: views:: zip ( c. keys , c. values ) ;
    auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
    auto dist = std:: distance ( zv. begin ( ) , it ) ;
    c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
    c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
Может выделять память во время операции слияния на месте.
Если несколько элементов в диапазоне имеют эквивалентные ключи, не определено, какой элемент будет вставлен (в ожидании 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 - тег устранения неоднозначности, указывающий, что входная последовательность отсортирована (относительно value_comp() ) и содержит только уникальные элементы
Требования к типам
-
InputIt должен удовлетворять требованиям LegacyInputIterator .

Возвращаемое значение

1,2) Пара, состоящая из итератора на вставленный элемент (или на элемент, который предотвратил вставку) и значения bool установленного в true тогда и только тогда, когда вставка произошла.
3,4) Итератор на вставленный элемент или на элемент, который предотвратил вставку.
5) Пара, состоящая из итератора на вставленный элемент (или на элемент, который предотвратил вставку) и значения bool установленного в true тогда и только тогда, когда вставка произошла.
6) Итератор на вставленный элемент или на элемент, который предотвратил вставку.
7-10) (нет)

Исключения

1-6) Если при выполнении любой операции возникает исключение, вставка не производится.

Сложность

1-6) Линейно по size() .
7) N + M·log ( M ) , где N — это size() до операции, а M — это std:: distance ( first, last ) .
8) Линейно по size() .
9) N + M·log ( M ) , где N — это size() до операции, а M — это ilist. size ( ) .
10) Линейная от N , где N это size() после операции.

Примечания

Подсказанная вставка ( ( 3,4 ) и ( 6 ) ) не возвращает булево значение для совместимости сигнатур с позиционной вставкой в последовательных контейнерах, таких как std::vector::insert . Это позволяет создавать универсальные вставщики, такие как std::inserter . Один из способов проверки успешности подсказанной вставки — сравнение size() до и после операции.

Пример

Смотрите также

создаёт элемент на месте
(публичная функция-член)
создаёт элементы на месте с использованием подсказки
(публичная функция-член)
вставляет элемент или присваивает текущему элементу, если ключ уже существует
(публичная функция-член)
создаёт std::insert_iterator типа, выведенного из аргумента
(шаблон функции)