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)
pos
の直前の位置にできるだけ近い位置に
value
を挿入します。
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 | - | 挿入する要素のソース範囲を定義するイテレータのペア range |
| 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
)
は、
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 << "insert done\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 << "no insertion\n"; }
出力:
insert done no insertion
関連項目
|
要素をその場で構築する
(公開メンバ関数) |
|
|
ヒントを使用して要素をその場で構築する
(公開メンバ関数) |
|
|
引数から推論された型の
std::insert_iterator
を作成する
(関数テンプレート) |