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)
可能な限り
pos
の直前の位置に近い位置に
value
を挿入します。
return
emplace_hint
(
pos, value
)
;
と等価です。
4)
value
を
pos
の直前の位置に可能な限り近い位置に挿入します。
return
emplace_hint
(
pos, std
::
move
(
value
)
)
;
と等価です。
5)
もし
*
this
が既に
等価
と透過的に比較される要素を含む場合、何もしません。それ以外の場合、
x
を
*
this
に以下のように挿入します:
emplace
(
std::
forward
<
P
>
(
x
)
)
;
。このオーバーロードは、
std::
is_constructible_v
<
std::
pair
<
key_type, mapped_type
>
, P
>
が
true
の場合にのみオーバーロード解決に参加します。
6)
もし
*
this
が既に
透過的に比較して等価
な要素を保持している場合、何も行わない。そうでない場合、
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
)
から要素を挿入し、以下の操作を順次実行するかのように動作します:
-
以下のように
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 ) ) ;
} -
新しく挿入された要素の範囲を
value_compでソート - 結果のソート済み範囲と既存の要素のソート済み範囲を単一のソート済み範囲にマージ
-
以下のように重複要素を削除:
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
)
から要素を挿入し、以下の操作を順次実行するかのように動作します:
-
以下のように
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 ) ) ;
} - 新しく追加された要素のソート済み範囲と既存の要素のソート済み範囲を単一のソート済み範囲にマージします。
-
以下のように重複要素を削除します:
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 | - | 挿入する要素のソース範囲を定義するイテレータのペア range |
| ilist | - | 値の挿入元となる初期化子リスト |
| x | - | キーと透過的に比較可能な任意の型の値 |
| s | - |
入力シーケンスがソート済み(
value_comp()
に関して)で、一意の要素のみを含むことを示す識別タグ
|
| 型要件 | ||
-
InputIt
は
LegacyInputIterator
の要件を満たさなければならない
|
||
戻り値
1,2)
挿入された要素(または挿入を妨げた要素)へのイテレータと、挿入が行われた場合にのみ
bool
値が
true
に設定されるペア。
3,4)
挿入された要素、または挿入を妨げた要素へのイテレータ。
5)
挿入された要素(または挿入を妨げた要素)へのイテレータと、挿入が行われた場合にのみ
bool
値が
true
に設定されるペア。
6)
挿入された要素、または挿入を妨げた要素へのイテレータ。
7-10)
(なし)
例外
1-6)
例外が任意の操作によってスローされた場合、挿入は無効となります。
|
このセクションは不完全です
理由: ケース 7-10 |
計算量
1-6)
size()
に対して線形。
8)
size()
に対して線形。
注記
ヒント付き挿入
(
(
3,4
)
および
(
6
)
)は、
std::vector::insert
のようなシーケンシャルコンテナに対する位置指定挿入とのシグネチャ互換性を保つため、ブール値を返しません。これにより、
std::inserter
のような汎用インサーターを作成することが可能になります。ヒント付き挿入の成功を確認する一つの方法は、挿入前後の
size()
を比較することです。
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
要素をその場で構築する
(公開メンバ関数) |
|
|
ヒントを使用して要素をその場で構築する
(公開メンバ関数) |
|
|
要素を挿入するか、キーが既に存在する場合は現在の要素に代入する
(公開メンバ関数) |
|
|
引数から推論された型の
std::insert_iterator
を作成する
(関数テンプレート) |