200200
201201 < p class ="text-right "> < small >
202202 最終更新日時(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秒
205205 </ span >
206206 < br />
207207 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
208- < span itemprop ="name "> suomesta </ span >
208+ < span itemprop ="name "> Akira Takahashi </ span >
209209 </ span >
210210 が更新
211211 </ small > </ p >
225225 < div class ="col-sm-12 content-body ">
226226
227227 < 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 >
230230
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 >
233233
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 >
235241
236242< 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 >
238244
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 >
240246
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 >
243249</ code > </ pre > </ div >
244250</ p >
245251< h2 > 概要</ h2 >
@@ -248,43 +254,60 @@ <h2>概要</h2>
248254< ul >
249255< li > (1) : 新たな要素< code > x</ code > をコピー挿入する</ li >
250256< 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 > が空の場合、効果はない。
256264それ以外の場合、< 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 > を返す。
258266それ以外の場合、< code > nh.key()</ code > と等価のキーを持つ要素がコンテナにない場合に限り、< code > nh</ code > が所有する要素を挿入する。 < code > nh.key()</ code > と同等のキーの要素を指すイテレータを常に返す。要素は、< code > hint</ code > の直前の位置のできるだけ近くに挿入される。</ li >
259267</ 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 >
260278< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数呼び出し式の評価結果となるオブジェクト・値 "> 戻り値</ a > </ h2 >
261279< 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 >
266284< li > 挿入された場合には、空の< a href ="../../node_handle/node_handle.html "> ノードハンドル</ a > 。</ li >
267285< li > 挿入されなかった場合には、< code > nh</ code > の値である。 </ li >
268286</ ul >
269287</ 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 >
271289</ ul >
272290< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量 "> 計算量</ a > </ h2 >
273291< 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 >
277295< li > ※ ここで < code > N</ code > は < code > first</ code > と < code > last</ code > の間の距離であり < code > size</ code > は挿入前のコンテナの < code > < a href ="size.html "> size()</ a > </ code > </ li >
278296</ ul >
279297</ li >
280- < li > (7 ) : 対数時間</ li >
281- < li > (8 ) : 一般に対数時間だが、指定された新たな要素が < code > hint</ code > が指す要素の直前に挿入された場合は償却定数時間。</ li >
298+ < li > (9 ) : 対数時間</ li >
299+ < li > (10 ) : 一般に対数時間だが、指定された新たな要素が < code > hint</ code > が指す要素の直前に挿入された場合は償却定数時間。</ li >
282300</ ul >
283301< h2 > 備考</ h2 >
284302< ul >
285303< li > これらの関数が呼ばれた後も、当該コンテナ内の要素を指す参照やイテレータは無効にはならない。< br />
286304 なお、規格書に明確な記載は無いが、当該コンテナ内の要素を指すポインタも無効にはならない。</ 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 >
288311</ ul >
289312< h2 > 例</ h2 >
290313< 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>
336359< 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 >
337360< 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 >
338361< 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 >
340367</ ul >
341368</ li >
342369</ ul > </ div >
0 commit comments