Namespaces
Variants

std::flat_multimap<Key,T,Compare,KeyContainer,MappedContainer>:: insert

From cppreference.net
iterator insert ( const value_type & value ) ;
(1) (C++23以降)
iterator 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 >
iterator 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_equivalent_t , InputIt first, InputIt last ) ;
(8) (C++23以降)
void insert ( std:: initializer_list < key_type > ilist ) ;
(9) (C++23以降)
void insert ( std:: sorted_equivalent_t s, std:: initializer_list < key_type > ilist ) ;
(10) (C++23以降)

要素をコンテナに挿入します。

1) value を挿入します。 return emplace ( value ) ; と等価です。
2) value を挿入します。 return emplace ( std :: move ( value ) ) ; と等価です。
3) pos の直前の位置にできるだけ近い位置に value を挿入します。 return emplace_hint ( pos, value ) ; と等価です。
4) value pos の直前の位置に可能な限り近い位置に挿入します。 return emplace_hint ( pos, std :: move ( value ) ) ; と等価です。
5) x * this に、以下のように挿入します: emplace ( std:: forward < P > ( x ) ) ; このオーバーロードは、 std:: is_constructible_v < pair < key_type, mapped_type > , P > true の場合にのみ、オーバーロード解決に参加します。
6) x * this に、 pos の直前の位置にできるだけ近い位置に挿入します。 return emplace_hint ( position, std:: forward < P > ( x ) ) ; と等価です。このオーバーロードは、 std:: is_constructible_v < 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. 結果として得られたソート済み範囲と既存の要素のソート済み範囲を単一のソート済み範囲にマージします。
インプレースマージ操作中にメモリを割り当てる可能性があります。
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. 新しく追加された要素のソート済み範囲と既存の要素のソート済み範囲を単一のソート済み範囲にマージします。
インプレースマージ操作中にメモリを割り当てる可能性があります。
9) 初期化リスト ilist から要素を挿入します。 insert ( ilist. begin ( ) , ilist. end ( ) ) ; と等価です。
10) 初期化子リスト ilist から要素を挿入します。 insert ( s, ilist. begin ( ) , ilist. end ( ) ) ; と同等です。

目次

パラメータ

pos - 新しい要素が挿入される位置の前を指すイテレータ
value - 挿入する要素の値
first, last - 挿入する要素のソース範囲を定義するイテレータのペア range
ilist - 値の挿入元となる初期化子リスト
x - キーと透過的に比較可能な任意の型の値
s - 入力シーケンスがソート済みであることを示す識別タグ( value_comp() に関して)
型要件
-
InputIt LegacyInputIterator の要件を満たさなければならない

戻り値

1-6) 挿入された要素へのイテレータ。
7-10) (なし)

例外

1-6) いずれかの操作によって例外がスローされた場合、挿入は無効となります。
7-10) 例外安全性保証なし。(?)

計算量

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() です。

関連項目

要素をその場で構築する
(公開メンバ関数)
ヒントを使用して要素をその場で構築する
(公開メンバ関数)
引数から推論された型の std::insert_iterator を作成する
(関数テンプレート)