Skip to content

Commit 0a80d95

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 9a3e681 commit 0a80d95

File tree

3 files changed

+172
-315
lines changed

3 files changed

+172
-315
lines changed

reference/map/map/try_emplace.html

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@
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-15T06:51:25">
204+
2025年05月15日 06時51分25秒
205205
</span>
206206
<br/>
207207
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -226,16 +226,34 @@
226226

227227
<div class="identifier-type">function template</div><div class="header">&lt;map&gt;</div><h1 itemprop="name"><span class="namespace" title="namespace std">std::</span><span class="class" title="class map">map::</span><span class="token">try_emplace</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">&lt;</span><span class="n">class</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
229-
<span class="n"><a href="../../utility/pair.html">pair</a></span><span class="o">&lt;</span><span class="n">iterator</span><span class="p">,</span> <span class="kt">bool</span><span class="o">&gt;</span> <span class="n">try_emplace</span><span class="p">(</span><span class="k">const</span> <span class="n">key_type</span><span class="o">&amp;</span> <span class="n">k</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</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">&lt;</span><span class="n">iterator</span><span class="p">,</span> <span class="kt">bool</span><span class="o">&gt;</span>
230+
<span class="n">try_emplace</span><span class="p">(</span><span class="k">const</span> <span class="n">key_type</span><span class="o">&amp;</span> <span class="n">k</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (1) C++17</span>
230231

231232
<span class="k">template</span> <span class="o">&lt;</span><span class="n">class</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
232-
<span class="n"><a href="../../utility/pair.html">pair</a></span><span class="o">&lt;</span><span class="n">iterator</span><span class="p">,</span> <span class="kt">bool</span><span class="o">&gt;</span> <span class="n">try_emplace</span><span class="p">(</span><span class="n">key_type</span><span class="o">&amp;&amp;</span> <span class="n">k</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (2)</span>
233+
<span class="n"><a href="../../utility/pair.html">pair</a></span><span class="o">&lt;</span><span class="n">iterator</span><span class="p">,</span> <span class="kt">bool</span><span class="o">&gt;</span>
234+
<span class="n">try_emplace</span><span class="p">(</span><span class="n">key_type</span><span class="o">&amp;&amp;</span> <span class="n">k</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (2) C++17</span>
233235

234236
<span class="k">template</span> <span class="o">&lt;</span><span class="n">class</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
235-
<span class="n">iterator</span> <span class="n">try_emplace</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">&amp;</span> <span class="n">k</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (3)</span>
237+
<span class="n">iterator</span>
238+
<span class="n">try_emplace</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">&amp;</span> <span class="n">k</span><span class="p">,</span>
240+
<span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (3) C++17</span>
236241

237242
<span class="k">template</span> <span class="o">&lt;</span><span class="n">class</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
238-
<span class="n">iterator</span> <span class="n">try_emplace</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">&amp;&amp;</span> <span class="n">k</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (4)</span>
243+
<span class="n">iterator</span>
244+
<span class="n">try_emplace</span><span class="p">(</span><span class="n">const_iterator</span> <span class="n">hint</span><span class="p">,</span>
245+
<span class="n">key_type</span><span class="o">&amp;&amp;</span> <span class="n">k</span><span class="p">,</span>
246+
<span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (4) C++17</span>
247+
248+
<span class="k">template</span> <span class="o">&lt;</span><span class="k">class</span> <span class="nc">K</span><span class="p">,</span> <span class="n">class</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
249+
<span class="n"><a href="../../utility/pair.html">pair</a></span><span class="o">&lt;</span><span class="n">iterator</span><span class="p">,</span> <span class="kt">bool</span><span class="o">&gt;</span>
250+
<span class="n">try_emplace</span><span class="p">(</span><span class="n">K</span><span class="o">&amp;&amp;</span> <span class="n">k</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (5) C++26</span>
251+
252+
<span class="k">template</span> <span class="o">&lt;</span><span class="k">class</span> <span class="nc">K</span><span class="p">,</span> <span class="n">class</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
253+
<span class="n">iterator</span>
254+
<span class="n">try_emplace</span><span class="p">(</span><span class="n">const_iterator</span> <span class="n">hint</span><span class="p">,</span>
255+
<span class="n">K</span><span class="o">&amp;&amp;</span> <span class="n">k</span><span class="p">,</span>
256+
<span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (6) C++26</span>
239257
</code></pre></div>
240258
</p>
241259
<h2>概要</h2>
@@ -248,58 +266,49 @@ <h2>概要</h2>
248266
<li>(2) : 指定された一時オブジェクトのキーが存在しない場合に、要素を直接構築で挿入する</li>
249267
<li>(3) : キーを検索するヒントを指定し、指定されたキーが存在しない場合に、要素を直接構築で挿入する</li>
250268
<li>(4) : キーを検索するヒントを指定し、指定された一時オブジェクトのキーが存在しない場合に、要素を直接構築で挿入する</li>
269+
<li>(5) : <code>key_type</code>型と比較可能なキーが存在しない場合に、要素を直接構築で挿入する</li>
270+
<li>(6) : キーを検索するヒントを指定し、指定された<code>key_type</code>型と比較可能なキーが存在しない場合に、要素を直接構築で挿入する</li>
251271
</ul>
252272
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Constraints。関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件">テンプレートパラメータ制約</a></h2>
253273
<ul>
254-
<li>(1)、(3) : <code>value_type</code> は、<code><a href="../../utility/piecewise_construct_t.html">piecewise_construct</a></code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(k)</code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/forward.html">forward</a>&lt;Args&gt;(args)...)</code> から <code>map</code> に直接構築可能であること</li>
255-
<li>(2)、(4) : <code>value_type</code> は、<code><a href="../../utility/piecewise_construct_t.html">piecewise_construct</a></code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/move.html">move</a>(k))</code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/forward.html">forward</a>&lt;Args&gt;(args)...)</code> から <code>map</code> に直接構築可能であること</li>
274+
<li>(1)、(3)、(5) : <code>value_type</code> は、<code><a href="../../utility/piecewise_construct_t.html">piecewise_construct</a></code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(k)</code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/forward.html">forward</a>&lt;Args&gt;(args)...)</code> から <code>map</code> に直接構築可能であること</li>
275+
<li>(2)、(4)、(6) : <code>value_type</code> は、<code><a href="../../utility/piecewise_construct_t.html">piecewise_construct</a></code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/move.html">move</a>(k))</code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/forward.html">forward</a>&lt;Args&gt;(args)...)</code> から <code>map</code> に直接構築可能であること</li>
276+
<li>(5), (6) : <code>key_compare::is_transparent</code> が妥当な式であること</li>
256277
</ul>
257278
<p>なお、規格に記載はないが、<code>hint</code><code><a href="emplace_hint.html">emplace_hint</a></code> と同様、コンテナの有効な読み取り専用イテレータである必要があるものと思われる。</p>
258279
<h2>効果</h2>
259280
<ul>
260-
<li>(1)、(3) : <code>map</code><code>k</code> と同値のキーを持つ要素を持っている場合、何もしない(引数への副作用もない)。そうでなければ、<code><a href="../../utility/piecewise_construct_t.html">piecewise_construct</a></code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(k)</code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/forward.html">forward</a>&lt;Args&gt;(args)...)</code> から構築した <code>value_type</code> 型のオブジェクトを挿入する。</li>
261-
<li>(2)、(4) : <code>map</code><code>k</code> と同値のキーを持つ要素を持っている場合、何もしない(引数への副作用もない)。そうでなければ、<code><a href="../../utility/piecewise_construct_t.html">piecewise_construct</a></code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/move.html">move</a>(k))</code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/forward.html">forward</a>&lt;Args&gt;(args)...)</code> から構築した <code>value_type</code> 型のオブジェクトを挿入する。</li>
281+
<li>(1)、(3)、(5) : <code>map</code><code>k</code> と同値のキーを持つ要素を持っている場合、何もしない(引数への副作用もない)。そうでなければ、<code><a href="../../utility/piecewise_construct_t.html">piecewise_construct</a></code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(k)</code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/forward.html">forward</a>&lt;Args&gt;(args)...)</code> から構築した <code>value_type</code> 型のオブジェクトを挿入する。</li>
282+
<li>(2)、(4)、(6) : <code>map</code><code>k</code> と同値のキーを持つ要素を持っている場合、何もしない(引数への副作用もない)。そうでなければ、<code><a href="../../utility/piecewise_construct_t.html">piecewise_construct</a></code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/move.html">move</a>(k))</code>, <code><a href="../../tuple/forward_as_tuple.html">forward_as_tuple</a>(<a href="../../utility/forward.html">forward</a>&lt;Args&gt;(args)...)</code> から構築した <code>value_type</code> 型のオブジェクトを挿入する。</li>
262283
</ul>
263284
<h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価結果となるオブジェクト・値">戻り値</a></h2>
264285
<ul>
265-
<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>
266287
<li>挿入された場合には、<code>first</code> に挿入された要素へのイテレータ、<code>second</code><code>true</code> が設定される。</li>
267288
<li>挿入されなかった場合には、<code>first</code><code>k</code> と等価のキーを持つ既存の要素へのイテレータ、<code>second</code><code>false</code> が設定される。</li>
268289
</ul>
269290
</li>
270-
<li>(3)、(4) :<ul>
291+
<li>(3)、(4)、(6) :<ul>
271292
<li>挿入された場合には、挿入された要素へのイテレータを返す。</li>
272293
<li>挿入されなかった場合には、<code>k</code> と等価のキーを持つ既存の要素へのイテレータを返す。</li>
273294
</ul>
274295
</li>
275296
</ul>
276297
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量">計算量</a></h2>
277298
<ul>
278-
<li>(1)、(2) : <code><a href="emplace.html">emplace</a></code> と同じ。</li>
279-
<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>
280301
</ul>
281302
<h2>備考</h2>
282303
<ul>
283-
<li>
284-
<p>概要に記載されているように、本メンバ関数は指定されたキーと等価の要素が既に存在する場合には、引数に副作用が発生しない。<br />
285-
一方、<code><a href="emplace.html">emplace</a></code><code><a href="emplace_hint.html">emplace_hint</a></code><code><a href="insert.html">insert</a></code> にはそのような規定は無く、挿入がされなかった場合でも引数に副作用(引数からのムーブ)が発生してしまう可能性があるため、注意が必要である。</p>
304+
<li>概要に記載されているように、本メンバ関数は指定されたキーと等価の要素が既に存在する場合には、引数に副作用が発生しない。 <ul>
305+
<li>一方、<code><a href="emplace.html">emplace</a></code><code><a href="emplace_hint.html">emplace_hint</a></code><code><a href="insert.html">insert</a></code> にはそのような規定は無く、挿入がされなかった場合でも引数に副作用(引数からのムーブ)が発生してしまう可能性があるため、注意が必要である。</li>
306+
</ul>
286307
</li>
287-
<li>
288-
<p>このメンバ関数の機能テストマクロは以下の通り。 </p>
289-
<table border="1" bordercolor="#888" style="border-collapse:collapse">
290-
<thead>
291-
<tr>
292-
<th>マクロ名</th>
293-
<th></th>
294-
</tr>
295-
</thead>
296-
<tbody>
297-
<tr>
298-
<td><code>__cpp_lib_map_try_emplace</code></td>
299-
<td><code>201411</code></td>
300-
</tr>
301-
</tbody>
302-
</table>
308+
<li>(5), (6) :<ul>
309+
<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>
310+
<li>これらの<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>は、<code>map&lt;string, int&gt;</code>のようなコンテナに対し、検索操作で文字列リテラルを渡した際に、キー型の一時オブジェクトが生成されるコストを減らすためにある。</li>
311+
</ul>
303312
</li>
304313
</ul>
305314
<h2></h2>
@@ -371,6 +380,10 @@ <h2>参照</h2>
371380
<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>
372381
<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>
373382
<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>
383+
<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>
384+
<li>C++26で<code>template &lt;class K&gt;</code>のバージョンが追加された</li>
385+
</ul>
386+
</li>
374387
</ul></div>
375388

376389
</div>

0 commit comments

Comments
 (0)