200
200
201
201
< p class ="text-right "> < small >
202
202
最終更新日時(UTC):
203
- < span itemprop ="datePublished " content ="2023-12-29T16:05:52 ">
204
- 2023年12月29日 16時05分52秒
203
+ < span itemprop ="datePublished " content ="2025-05-19T07:16:03 ">
204
+ 2025年05月19日 07時16分03秒
205
205
</ span >
206
206
< br />
207
207
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
208
- < span itemprop ="name "> suomesta </ span >
208
+ < span itemprop ="name "> Akira Takahashi </ span >
209
209
</ span >
210
210
が更新
211
211
</ small > </ p >
225
225
< div class ="col-sm-12 content-body ">
226
226
227
227
< div class ="identifier-type "> function</ div > < div class ="header "> <set></ div > < h1 itemprop ="name "> < span class ="namespace " title ="namespace std "> std::</ span > < span class ="class " title ="class set "> set::</ span > < span class ="token "> insert</ span > </ h1 >
228
- < div itemprop ="articleBody "> < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="n "> < a href ="../../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> iterator</ span > < span class ="p "> ,</ span > < span class ="kt "> bool</ span > < span class ="o "> ></ span > < span class ="n "> insert</ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> value_type</ span > < span class ="o "> &</ span > < span class ="n "> x</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1)</ span >
229
- < span class ="n "> < a href ="../../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> iterator</ span > < span class ="p "> ,</ span > < span class ="kt "> bool</ span > < span class ="o "> ></ span > < span class ="n "> insert</ span > < span class ="p "> (</ span > < span class ="n "> value_type</ span > < span class ="o "> &&</ span > < span class ="n "> y</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2) C++11</ span >
228
+ < div itemprop ="articleBody "> < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="n "> < a href ="../../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> iterator</ span > < span class ="p "> ,</ span > < span class ="kt "> bool</ span > < span class ="o "> ></ span > < span class ="n "> insert</ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> value_type</ span > < span class ="o "> &</ span > < span class ="n "> x</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1) C++03 </ span >
229
+ < span class ="n "> < a href ="../../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> iterator</ span > < span class ="p "> ,</ span > < span class ="kt "> bool</ span > < span class ="o "> ></ span > < span class ="n "> insert</ span > < span class ="p "> (</ span > < span class ="n "> value_type</ span > < span class ="o "> &&</ span > < span class ="n "> y</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2) C++11</ span >
230
230
231
- < span class ="n " > iterator </ span > < span class ="nf " > insert </ span > < span class ="p " > ( </ span > < span class =" n " > iterator </ span > < span class ="n " > position </ span > < span class ="p " > , </ span > < span class =" k " > const </ span > < span class =" n " > value_type </ span > < span class =" o "> & </ span > < span class =" n " > x </ span > < span class =" p " > ); </ span > < span class =" c1 " > // (3) C++03 </ span >
232
- < span class ="n "> iterator </ span > < span class ="nf " > insert </ span > < span class ="p " > ( </ span > < span class ="n " > const_iterator </ span > < span class ="n " > position </ span > < span class ="p " > , </ span > < span class ="k " > const </ span > < span class ="n "> value_type </ span > < span class ="o "> &</ span > < span class ="n "> x</ span > < span class ="p "> );</ span > < span class ="c1 "> // (3) C++11 </ span >
231
+ < span class ="k " > template </ span > < span class ="o " > < </ span > < span class ="k " > class</ span > < span class ="nc " > K </ span > < span class ="o "> > </ span >
232
+ < span class ="n "> < a href =" ../../utility/pair.html " > pair </ a > </ span > < span class ="o " > < </ span > < span class ="n " > iterator </ span > < span class ="p " > , </ span > < span class ="kt " > bool </ span > < span class ="o " > > </ span > < span class ="n " > insert </ span > < span class =" p " > ( </ span > < span class ="n "> K </ span > < span class ="o "> && </ span > < span class ="n "> x</ span > < span class ="p "> );</ span > < span class ="c1 "> // (3) C++26 </ span >
233
233
234
- < span class ="n "> iterator</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> position</ span > < span class ="p "> ,</ span > < span class ="n "> value_type</ span > < span class ="o "> &&</ span > < span class ="n "> y</ span > < span class ="p "> );</ span > < span class ="c1 "> // (4) C++11</ span >
234
+ < span class ="n "> iterator</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span > < span class ="k "> const</ span > < span class ="n "> value_type</ span > < span class ="o "> &</ span > < span class ="n "> x</ span > < span class ="p "> );</ span > < span class ="c1 "> // (4) C++03</ span >
235
+ < span class ="n "> iterator</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span > < span class ="k "> const</ span > < span class ="n "> value_type</ span > < span class ="o "> &</ span > < span class ="n "> x</ span > < span class ="p "> );</ span > < span class ="c1 "> // (4) C++11</ span >
236
+
237
+ < span class ="n "> iterator</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span > < span class ="n "> value_type</ span > < span class ="o "> &&</ span > < span class ="n "> y</ span > < span class ="p "> );</ span > < span class ="c1 "> // (5) C++11</ span >
238
+
239
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> K</ span > < span class ="o "> ></ span >
240
+ < span class ="n "> iterator</ span > < span class ="n "> insert</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span > < span class ="n "> K</ span > < span class ="o "> &&</ span > < span class ="n "> x</ span > < span class ="p "> );</ span > < span class ="c1 "> // (6) C++26</ span >
235
241
236
242
< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> InputIterator</ span > < span class ="o "> ></ span >
237
- < span class ="kt "> void</ span > < span class ="n "> insert</ span > < span class ="p "> (</ span > < span class ="n "> InputIterator</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span > < span class ="n "> InputIterator</ span > < span class ="n "> last</ span > < span class ="p "> );</ span > < span class ="c1 "> // (5) </ span >
243
+ < span class ="kt "> void</ span > < span class ="n "> insert</ span > < span class ="p "> (</ span > < span class ="n "> InputIterator</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span > < span class ="n "> InputIterator</ span > < span class ="n "> last</ span > < span class ="p "> );</ span > < span class ="c1 "> // (7) C++03 </ span >
238
244
239
- < span class ="kt "> void</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../initializer_list/initializer_list.html "> initializer_list</ a > </ span > < span class ="o "> <</ span > < span class ="n "> value_type</ span > < span class ="o "> ></ span > < span class ="n "> init</ span > < span class ="p "> );</ span > < span class ="c1 "> // (6) </ span >
245
+ < span class ="kt "> void</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../initializer_list/initializer_list.html "> initializer_list</ a > </ span > < span class ="o "> <</ span > < span class ="n "> value_type</ span > < span class ="o "> ></ span > < span class ="n "> init</ span > < span class ="p "> );</ span > < span class ="c1 "> // (8) C++03 </ span >
240
246
241
- < span class ="n "> insert_return_type</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> node_type</ span > < span class ="o "> &&</ span > < span class ="n "> nh</ span > < span class ="p "> );</ span > < span class ="c1 "> // (7 ) C++17</ span >
242
- < span class ="n "> iterator</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span > < span class ="n "> node_type</ span > < span class ="o "> &&</ span > < span class ="n "> nh</ span > < span class ="p "> );</ span > < span class ="c1 "> // (8 ) C++17</ span >
247
+ < span class ="n "> insert_return_type</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> node_type</ span > < span class ="o "> &&</ span > < span class ="n "> nh</ span > < span class ="p "> );</ span > < span class ="c1 "> // (9 ) C++17</ span >
248
+ < span class ="n "> iterator</ span > < span class ="nf "> insert</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span > < span class ="n "> node_type</ span > < span class ="o "> &&</ span > < span class ="n "> nh</ span > < span class ="p "> );</ span > < span class ="c1 "> // (10 ) C++17</ span >
243
249
</ code > </ pre > </ div >
244
250
</ p >
245
251
< h2 > 概要</ h2 >
@@ -248,43 +254,60 @@ <h2>概要</h2>
248
254
< ul >
249
255
< li > (1) : 新たな要素< code > x</ code > をコピー挿入する</ li >
250
256
< li > (2) : 新たな要素< code > y</ code > をムーブ挿入する</ li >
251
- < li > (3) : 新たな要素< code > x</ code > をコピー挿入する。< code > position</ code > パラメータに適切な挿入位置を指定すれば、高速に挿入できる</ li >
252
- < li > (4) : 新たな要素< code > y</ code > をムーブ挿入する。< code > position</ code > パラメータに適切な挿入位置を指定すれば、高速に挿入できる</ li >
253
- < li > (5) : < a class ="cpprefjp-defined-word " data-desc ="2つのイテレータで表現される半開区間を表す。C++20からイテレータと番兵で異なる型であっても指定可能になる "> イテレータ範囲</ a > < code > [first, last)</ code > の要素を挿入する</ li >
254
- < li > (6) : 初期化子リスト< code > init</ code > の要素を挿入する</ li >
255
- < li > (7) : < code > nh</ code > が空の場合、効果はない。
257
+ < li > (3) : < code > value_type</ code > に変換可能な< code > Key</ code > 型の新たな要素< code > x</ code > を転送して挿入する</ li >
258
+ < li > (4) : 新たな要素< code > x</ code > をコピー挿入する。< code > hint</ code > パラメータに適切な挿入位置を指定すれば、高速に挿入できる</ li >
259
+ < li > (5) : 新たな要素< code > y</ code > をムーブ挿入する。< code > hint</ code > パラメータに適切な挿入位置を指定すれば、高速に挿入できる</ li >
260
+ < li > (6) : < code > value_type</ code > に変換可能な< code > Key</ code > 型の新たな要素< code > x</ code > を転送して挿入する。< code > hint</ code > パラメータに適切な挿入位置を指定すれば、高速に挿入できる</ li >
261
+ < li > (7) : < a class ="cpprefjp-defined-word " data-desc ="2つのイテレータで表現される半開区間を表す。C++20からイテレータと番兵で異なる型であっても指定可能になる "> イテレータ範囲</ a > < code > [first, last)</ code > の要素を挿入する</ li >
262
+ < li > (8) : 初期化子リスト< code > init</ code > の要素を挿入する</ li >
263
+ < li > (9) : < code > nh</ code > が空の場合、効果はない。
256
264
それ以外の場合、< code > nh.key()</ code > と等価のキーを持つ要素がコンテナにない場合に限り、< code > nh</ code > が所有する要素を挿入する。</ li >
257
- < li > (8 ) : < code > nh</ code > が空の場合、効果はなく、< code > (*this).end()</ code > を返す。
265
+ < li > (10 ) : < code > nh</ code > が空の場合、効果はなく、< code > (*this).end()</ code > を返す。
258
266
それ以外の場合、< code > nh.key()</ code > と等価のキーを持つ要素がコンテナにない場合に限り、< code > nh</ code > が所有する要素を挿入する。 < code > nh.key()</ code > と同等のキーの要素を指すイテレータを常に返す。要素は、< code > hint</ code > の直前の位置のできるだけ近くに挿入される。</ li >
259
267
</ ul >
268
+ < h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Constraints。関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件 "> テンプレートパラメータ制約</ a > </ h2 >
269
+ < ul >
270
+ < li > (3), (6) :< ul >
271
+ < li > < code > key_compare::is_transparent</ code > が妥当な式であること</ li >
272
+ < li > < code > < a href ="../../type_traits/is_convertible.html "> is_convertible_v</ a > <K&&, const_iterator> == false</ code > であること</ li >
273
+ < li > < code > < a href ="../../type_traits/is_convertible.html "> is_convertible_v</ a > <K&&, iterator> == false</ code > であること</ li >
274
+ < li > < code > value_type</ code > が< code > < a href ="../../utility/forward.html "> std::forward</ a > <K>(x)</ code > によって直接構築可能であること</ li >
275
+ </ ul >
276
+ </ li >
277
+ </ ul >
260
278
< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数呼び出し式の評価結果となるオブジェクト・値 "> 戻り値</ a > </ h2 >
261
279
< ul >
262
- < li > (1), (2) : < code > first</ code > に新しく挿入された要素またはすでに < code > set</ code > に格納されていた同じ値の要素を指すイテレータを設定する。< code > second</ code > には、要素が挿入されたときに < code > true</ code > を、同じ値の要素が存在したときに < code > false</ code > を設定する。</ li >
263
- < li > (3 ), (4 ) : 新しく挿入された要素またはすでに < code > set</ code > に格納されていた同じ値の要素を指すイテレータを返す。</ li >
264
- < li > (5 ), (6 ) : なし</ li >
265
- < li > (7 ) : < code > < a href ="../../map/map.html "> insert_return_type</ a > </ code > を返す。< code > insert_return_type</ code > のイテレータ型メンバ変数< code > position</ code > 、< code > bool</ code > 型メンバ変数< code > inserted</ code > に格納される値は(1), (2)のものと同じ情報である。< code > nh</ code > が空の場合は、< code > position</ code > は終端イテレータである。< code > node_type</ code > 型メンバ変数< code > node</ code > には、< ul >
280
+ < li > (1), (2), (3) : < code > first</ code > に新しく挿入された要素またはすでに < code > set</ code > に格納されていた同じ値の要素を指すイテレータを設定する。< code > second</ code > には、要素が挿入されたときに < code > true</ code > を、同じ値の要素が存在したときに < code > false</ code > を設定する。</ li >
281
+ < li > (4 ), (5), (6 ) : 新しく挿入された要素またはすでに < code > set</ code > に格納されていた同じ値の要素を指すイテレータを返す。</ li >
282
+ < li > (7 ), (8 ) : なし</ li >
283
+ < li > (9 ) : < code > < a href ="../../map/map.html "> insert_return_type</ a > </ code > を返す。< code > insert_return_type</ code > のイテレータ型メンバ変数< code > position</ code > 、< code > bool</ code > 型メンバ変数< code > inserted</ code > に格納される値は(1), (2)のものと同じ情報である。< code > nh</ code > が空の場合は、< code > position</ code > は終端イテレータである。< code > node_type</ code > 型メンバ変数< code > node</ code > には、< ul >
266
284
< li > 挿入された場合には、空の< a href ="../../node_handle/node_handle.html "> ノードハンドル</ a > 。</ li >
267
285
< li > 挿入されなかった場合には、< code > nh</ code > の値である。 </ li >
268
286
</ ul >
269
287
</ li >
270
- < li > (8 ) : < code > nh</ code > が空の場合、< code > (*this).end()</ code > を返す。そうではない場合、< code > nh</ code > と等価のキーの要素を指すイテレータを常に返す。</ li >
288
+ < li > (10 ) : < code > nh</ code > が空の場合、< code > (*this).end()</ code > を返す。そうではない場合、< code > nh</ code > と等価のキーの要素を指すイテレータを常に返す。</ li >
271
289
</ ul >
272
290
< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量 "> 計算量</ a > </ h2 >
273
291
< ul >
274
- < li > (1), (2) : 対数時間</ li >
275
- < li > (3 ), (4) : 一般に対数時間だが、< code > x</ code > または < code > y</ code > が < code > position </ code > が指す要素の直前に挿入された場合は償却定数時間</ li >
276
- < li > (5 ), (6 ) : 一般に N log(size + N)< ul >
292
+ < li > (1), (2), (3) : 対数時間</ li >
293
+ < li > (4 ), (5), (6) : 一般に対数時間だが、< code > x</ code > または < code > y</ code > が < code > hint </ code > が指す要素の直前に挿入された場合は償却定数時間</ li >
294
+ < li > (7 ), (8 ) : 一般に N log(size + N)< ul >
277
295
< li > ※ ここで < code > N</ code > は < code > first</ code > と < code > last</ code > の間の距離であり < code > size</ code > は挿入前のコンテナの < code > < a href ="size.html "> size()</ a > </ code > </ li >
278
296
</ ul >
279
297
</ li >
280
- < li > (7 ) : 対数時間</ li >
281
- < li > (8 ) : 一般に対数時間だが、指定された新たな要素が < code > hint</ code > が指す要素の直前に挿入された場合は償却定数時間。</ li >
298
+ < li > (9 ) : 対数時間</ li >
299
+ < li > (10 ) : 一般に対数時間だが、指定された新たな要素が < code > hint</ code > が指す要素の直前に挿入された場合は償却定数時間。</ li >
282
300
</ ul >
283
301
< h2 > 備考</ h2 >
284
302
< ul >
285
303
< li > これらの関数が呼ばれた後も、当該コンテナ内の要素を指す参照やイテレータは無効にはならない。< br />
286
304
なお、規格書に明確な記載は無いが、当該コンテナ内の要素を指すポインタも無効にはならない。</ li >
287
- < li > 内部的に < code > set</ code > コンテナは、コンストラクト時に指定された比較オブジェクトによって要素を下位から上位へとソートして保持する。 (7), (8) の場合、要素はコピーもムーブもされない。</ li >
305
+ < li > 内部的に < code > set</ code > コンテナは、コンストラクト時に指定された比較オブジェクトによって要素を下位から上位へとソートして保持する。 (9), (10) の場合、要素はコピーもムーブもされない。</ li >
306
+ < li > (3), (6) :< ul >
307
+ < li > < code > is_transparent</ code > は、標準ライブラリの< code > < a href ="../../functional/less.html "> std::less</ a > </ code > 、< code > < a href ="../../functional/greater.html "> std::greater</ a > </ code > といった関数オブジェクトの、< code > void</ code > に対する特殊化で定義される。それ以外のテンプレートパラメータで< code > is_transparent</ code > が定義されないのは、互換性のためである。</ li >
308
+ < li > これらの< a class ="cpprefjp-defined-word " data-desc ="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合 "> オーバーロード</ a > は、< code > map<string, int></ code > のようなコンテナに対し、検索操作で文字列リテラルを渡した際に、キー型の一時オブジェクトが生成されるコストを減らすためにある。</ li >
309
+ </ ul >
310
+ </ li >
288
311
</ ul >
289
312
< h2 > 例</ h2 >
290
313
< p > < div class ="yata " id ="4b7b3c52cf13fab99f9df91e1d291f017841c5cd "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
@@ -336,7 +359,11 @@ <h2>参照</h2>
336
359
< li > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf " target ="_blank "> N2350 Container insert/erase and iterator constness (Revision 1)</ a > </ li >
337
360
< li > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf " target ="_blank "> N2679 Initializer Lists for Standard Containers(Revision 1)</ a > </ li >
338
361
< li > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf " target ="_blank "> Splicing Maps and Sets(Revision 5)</ a > < ul >
339
- < li > (7), (8)経緯となる提案文書</ li >
362
+ < li > C++17で導入されたノード挿入(9), (10)の経緯となる提案文書</ li >
363
+ </ ul >
364
+ </ li >
365
+ < li > < a href ="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html " target ="_blank "> P2363R5: Extending associative containers with the remaining heterogeneous overloads</ a > < ul >
366
+ < li > C++26で< code > template <class K></ code > のバージョンが追加された</ li >
340
367
</ ul >
341
368
</ li >
342
369
</ ul > </ div >
0 commit comments