200
200
201
201
< p class ="text-right "> < small >
202
202
最終更新日時(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秒
205
205
</ span >
206
206
< br />
207
207
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
226
226
227
227
< 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 >
228
228
< 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 >
231
232
< 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 >
234
236
< 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 >
237
241
< 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 >
239
256
</ code > </ pre > </ div >
240
257
</ p >
241
258
< h2 > 概要</ h2 >
@@ -246,52 +263,50 @@ <h2>概要</h2>
246
263
< li > (2) : < code > key_type</ code > 型の一時オブジェクトのキーをとって挿入もしくは代入する</ li >
247
264
< li > (3) : 挿入位置のヒントをともない、< code > key_type</ code > 型のキーをとって挿入もしくは代入する</ li >
248
265
< 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 >
249
268
</ ul >
250
269
< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Constraints。関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件 "> テンプレートパラメータ制約</ a > </ h2 >
251
270
< 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 >
253
276
< 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 >
254
277
</ ul >
255
278
< p > なお、規格に記載はないが、< code > hint</ code > は < code > < a href ="emplace_hint.html "> emplace_hint</ a > </ code > と同様、コンテナの有効な読み取り専用イテレータである必要があるものと思われる。</ p >
256
279
< h2 > 効果</ h2 >
257
280
< 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 >
259
282
< 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 >
260
283
</ ul >
261
284
< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数呼び出し式の評価結果となるオブジェクト・値 "> 戻り値</ a > </ h2 >
262
285
< 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 >
264
287
< li > 挿入された場合には、< code > first</ code > に挿入された要素へのイテレータ、< code > second</ code > に < code > true</ code > が設定される。</ li >
265
288
< li > 代入された場合には、< code > first</ code > に代入された要素へのイテレータ、< code > second</ code > に < code > false</ code > が設定される。</ li >
266
289
</ ul >
267
290
</ li >
268
- < li > (3)、(4) :< ul >
291
+ < li > (3)、(4)、(6) :< ul >
269
292
< li > 挿入された場合には、挿入された要素へのイテレータを返す。</ li >
270
293
< li > 代入された場合には、代入された要素へのイテレータを返す。</ li >
271
294
</ ul >
272
295
</ li >
273
296
</ ul >
274
297
< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量 "> 計算量</ a > </ h2 >
275
298
< 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 >
278
301
</ ul >
279
302
< 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 >
295
310
< h2 > 例</ h2 >
296
311
< 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 >
297
312
< 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>
358
373
< 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 >
359
374
< 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 >
360
375
< 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 >
361
380
</ ul > </ div >
362
381
363
382
</ div >
0 commit comments