200200
201201 < p class ="text-right "> < small >
202202 最終更新日時(UTC):
203- < span itemprop ="datePublished " content ="2024-06-11T13:45:38 ">
204- 2024年06月11日 13時45分38秒
203+ < span itemprop ="datePublished " content ="2025-05-15T10:05:30 ">
204+ 2025年05月15日 10時05分30秒
205205 </ span >
206206 < br />
207207 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
226226
227227 < div class ="identifier-type "> function template</ div > < div class ="header "> <map></ div > < h1 itemprop ="name "> < span class ="namespace " title ="namespace std "> std::</ span > < span class ="class " title ="class map "> map::</ span > < span class ="token "> insert_or_assign</ span > < span class ="cpp cpp17 " title ="C++17で追加 "> (C++17)</ span > </ h1 >
228228< div itemprop ="articleBody "> < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> M</ span > < span class ="o "> ></ 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_or_assign</ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> key_type</ span > < span class ="o "> &</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span > < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1)</ span >
230-
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 >
230+ < span class ="n "> insert_or_assign</ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> key_type</ span > < span class ="o "> &</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span >
231+ < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1) C++17</ span >
231232< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> M</ 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_or_assign</ span > < span class ="p "> (</ span > < span class ="n "> key_type</ span > < span class ="o "> &&</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span > < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2)</ span >
233-
233+ < 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 >
234+ < span class ="n "> insert_or_assign</ span > < span class ="p "> (</ span > < span class ="n "> key_type</ span > < span class ="o "> &&</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span >
235+ < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2) C++17</ span >
234236< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> M</ span > < span class ="o "> ></ span >
235- < span class ="n "> iterator</ span > < span class ="n "> insert_or_assign</ 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 "> key_type</ span > < span class ="o "> &</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span > < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (3)</ span >
236-
237+ < span class ="n "> iterator</ span >
238+ < span class ="n "> insert_or_assign</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span >
239+ < span class ="k "> const</ span > < span class ="n "> key_type</ span > < span class ="o "> &</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span >
240+ < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (3) C++17</ span >
237241< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> M</ span > < span class ="o "> ></ span >
238- < span class ="n "> iterator</ span > < span class ="n "> insert_or_assign</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span > < span class ="n "> key_type</ span > < span class ="o "> &&</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span > < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (4)</ span >
242+ < span class ="n "> iterator</ span >
243+ < span class ="n "> insert_or_assign</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span >
244+ < span class ="n "> key_type</ span > < span class ="o "> &&</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span >
245+ < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (4) C++17</ span >
246+
247+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> K</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> M</ span > < span class ="o "> ></ span >
248+ < 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 >
249+ < span class ="n "> insert_or_assign</ span > < span class ="p "> (</ span > < span class ="n "> K</ span > < span class ="o "> &&</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span >
250+ < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (5) C++26</ span >
251+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> K</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> M</ span > < span class ="o "> ></ span >
252+ < span class ="n "> iterator</ span >
253+ < span class ="n "> insert_or_assign</ span > < span class ="p "> (</ span > < span class ="n "> const_iterator</ span > < span class ="n "> hint</ span > < span class ="p "> ,</ span >
254+ < span class ="n "> K</ span > < span class ="o "> &&</ span > < span class ="n "> k</ span > < span class ="p "> ,</ span >
255+ < span class ="n "> M</ span > < span class ="o "> &&</ span > < span class ="n "> obj</ span > < span class ="p "> );</ span > < span class ="c1 "> // (6) C++26</ span >
239256</ code > </ pre > </ div >
240257</ p >
241258< h2 > 概要</ h2 >
@@ -246,52 +263,50 @@ <h2>概要</h2>
246263< li > (2) : < code > key_type</ code > 型の一時オブジェクトのキーをとって挿入もしくは代入する</ li >
247264< li > (3) : 挿入位置のヒントをともない、< code > key_type</ code > 型のキーをとって挿入もしくは代入する</ li >
248265< li > (4) : 挿入位置のヒントをともない、< code > key_type</ code > 型の一時オブジェクトのキーをとって挿入もしくは代入する</ li >
266+ < li > (5) : < code > key_type</ code > と比較可能な< code > K</ code > 型のキーをとって挿入もしくは代入する</ li >
267+ < li > (6) : 挿入位置のヒントをともない、< code > key_type</ code > と比較可能な< code > K</ code > 型のキーをとって挿入もしくは代入する</ li >
249268</ ul >
250269< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Constraints。関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件 "> テンプレートパラメータ制約</ a > </ h2 >
251270< ul >
252- < li > (1)、(3) : < code > < a href ="../../type_traits/is_assignable.html "> is_assignable_v</ a > <mapped_type&, M&&></ code > が < code > true</ code > であること。< code > value_type</ code > は、< code > k</ code > , < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > から < code > map</ code > に直接構築可能であること</ li >
271+ < li > (5), (6) : < code > key_compare::is_transparent</ code > が妥当な式であること</ li >
272+ </ ul >
273+ < h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Mandates。満たさなければプログラムが不適格となる要件。この要件は、オーバーロード解決によって選択された関数内での`static_assert`の定数条件式や、関数に対するdelete宣言などで表現できる "> 適格要件</ a > </ h2 >
274+ < ul >
275+ < li > (1)、(3)、(5)、(6) : < code > < a href ="../../type_traits/is_assignable.html "> is_assignable_v</ a > <mapped_type&, M&&></ code > が < code > true</ code > であること。< code > value_type</ code > は、< code > k</ code > , < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > から < code > map</ code > に直接構築可能であること</ li >
253276< li > (2)、(4) : < code > < a href ="../../type_traits/is_assignable.html "> is_assignable_v</ a > <mapped_type&, M&&></ code > が < code > true</ code > であること。< code > value_type</ code > は、< code > < a href ="../../utility/move.html "> move</ a > (k)</ code > , < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > から < code > map</ code > に直接構築可能であること</ li >
254277</ ul >
255278< p > なお、規格に記載はないが、< code > hint</ code > は < code > < a href ="emplace_hint.html "> emplace_hint</ a > </ code > と同様、コンテナの有効な読み取り専用イテレータである必要があるものと思われる。</ p >
256279< h2 > 効果</ h2 >
257280< ul >
258- < li > (1)、(3) : < code > map</ code > が < code > k</ code > と同値のキーを持つ要素 < code > e</ code > を持っている場合、< code > e.second</ code > に < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > を代入する。そうでなければ、< code > k</ code > , < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > から構築した < code > value_type</ code > 型のオブジェクトを挿入する。</ li >
281+ < li > (1)、(3)、(5)、(6) : < code > map</ code > が < code > k</ code > と同値のキーを持つ要素 < code > e</ code > を持っている場合、< code > e.second</ code > に < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > を代入する。そうでなければ、< code > k</ code > , < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > から構築した < code > value_type</ code > 型のオブジェクトを挿入する。</ li >
259282< li > (2)、(4) : < code > map</ code > が < code > k</ code > と同値のキーを持つ要素 < code > e</ code > を持っている場合、< code > e.second</ code > に < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > を代入する。そうでなければ、< code > < a href ="../../utility/move.html "> move</ a > (k)</ code > , < code > < a href ="../../utility/forward.html "> forward</ a > <M>(obj)</ code > から構築した < code > value_type</ code > 型のオブジェクトを挿入する。</ li >
260283</ ul >
261284< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数呼び出し式の評価結果となるオブジェクト・値 "> 戻り値</ a > </ h2 >
262285< ul >
263- < li > (1)、(2) : イテレータと < code > bool</ code > 値の < code > < a href ="../../utility/pair.html "> pair</ a > </ code > を返す。< ul >
286+ < li > (1)、(2)、(5) : イテレータと < code > bool</ code > 値の < code > < a href ="../../utility/pair.html "> pair</ a > </ code > を返す。< ul >
264287< li > 挿入された場合には、< code > first</ code > に挿入された要素へのイテレータ、< code > second</ code > に < code > true</ code > が設定される。</ li >
265288< li > 代入された場合には、< code > first</ code > に代入された要素へのイテレータ、< code > second</ code > に < code > false</ code > が設定される。</ li >
266289</ ul >
267290</ li >
268- < li > (3)、(4) :< ul >
291+ < li > (3)、(4)、(6) :< ul >
269292< li > 挿入された場合には、挿入された要素へのイテレータを返す。</ li >
270293< li > 代入された場合には、代入された要素へのイテレータを返す。</ li >
271294</ ul >
272295</ li >
273296</ ul >
274297< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量 "> 計算量</ a > </ h2 >
275298< ul >
276- < li > (1)、(2) : < code > < a href ="emplace.html "> emplace</ a > </ code > と同じ。</ li >
277- < li > (3)、(4) : < code > < a href ="emplace_hint.html "> emplace_hint</ a > </ code > と同じ。</ li >
299+ < li > (1)、(2)、(5) : < code > < a href ="emplace.html "> emplace</ a > </ code > と同じ。</ li >
300+ < li > (3)、(4)、(6) : < code > < a href ="emplace_hint.html "> emplace_hint</ a > </ code > と同じ。</ li >
278301</ ul >
279302< h2 > 備考</ h2 >
280- < p > このメンバ関数の機能テストマクロは以下の通り。</ p >
281- < table border ="1 " bordercolor ="#888 " style ="border-collapse:collapse ">
282- < thead >
283- < tr >
284- < th > マクロ名</ th >
285- < th > 値</ th >
286- </ tr >
287- </ thead >
288- < tbody >
289- < tr >
290- < td > < code > __cpp_lib_map_try_emplace</ code > </ td >
291- < td > < code > 201411</ code > </ td >
292- </ tr >
293- </ tbody >
294- </ table >
303+ < ul >
304+ < li > (5), (6) :< ul >
305+ < 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 >
306+ < li > これらの< a class ="cpprefjp-defined-word " data-desc ="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合 "> オーバーロード</ a > は、< code > map<string, int></ code > のようなコンテナに対し、検索操作で文字列リテラルを渡した際に、キー型の一時オブジェクトが生成されるコストを減らすためにある。</ li >
307+ </ ul >
308+ </ li >
309+ </ ul >
295310< h2 > 例</ h2 >
296311< p > < div class ="yata " id ="4dbbb4585dddec7bf9637a2ee62d1672861313c1 "> < 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 >
297312< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../map.html "> <map></ a > </ span > < span class ="cp "> </ span >
@@ -358,6 +373,10 @@ <h2>参照</h2>
358373< li > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4006.html " target ="_blank "> N4006 An improved emplace() for unique-key maps</ a > </ li >
359374< li > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4240.html " target ="_blank "> N4240 Improved insertion interface for unique-key maps (Revision 2)</ a > </ li >
360375< li > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html " target ="_blank "> N4279 Improved insertion interface for unique-key maps (Revision 2.3)</ a > </ li >
376+ < li > < a href ="http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html " target ="_blank "> P2363R5 Extending associative containers with the remaining heterogeneous overloads</ a > < ul >
377+ < li > C++26で< code > template <class K></ code > のバージョンが追加された</ li >
378+ </ ul >
379+ </ li >
361380</ ul > </ div >
362381
363382 </ div >
0 commit comments