名前空間
変種
操作

std::map::emplace

提供: cppreference.com
< cpp‎ | container‎ | map
template< class... Args >
std::pair<iterator,bool> emplace( Args&&... args );
(C++11およびそれ以降)

コンテナにそのキーを持つ要素がなければ、指定された args を使用してその場で構築される新しい要素をコンテナに挿入します。

emplace を注意深く使用すれば、不必要なコピーやムーブを避けながら新しい要素を構築することができます。 新しい要素 (すなわち std::pair<const Key, T>) のコンストラクタは、 emplace に与えられたものとまったく同じ引数が std::forward<Args>(args)... によって転送されて、呼ばれます。 コンテナにそのキーの要素がすでに存在している場合でも、要素は構築されるかもしれません。 その場合、新しく構築された要素は即座に破壊されます。

どのイテレータも参照も無効化されません。

目次

[編集] 引数

args - 要素のコンストラクタに転送される引数

[編集] 戻り値

挿入された要素、または挿入しなかった場合は既存の要素を指すイテレータと、挿入が発生したかどうかを表す bool から構成される、ペアを返します。 挿入された場合は true、挿入しなかった場合は false です。

[編集] 例外

何らかの操作によって例外が投げられた場合、この関数は何の効果も持ちません。

[編集] 計算量

コンテナのサイズの対数。

[編集]

#include <iostream>
#include <utility>
#include <string>
#include <map>
 
int main()
{
    std::map<std::string, std::string> m;
 
    // uses pair's move constructor
    m.emplace(std::make_pair(std::string("a"), std::string("a")));
 
    // uses pair's converting move constructor
    m.emplace(std::make_pair("b", "abcd"));
 
    // uses pair's template constructor
    m.emplace("d", "ddd");
 
    // uses pair's piecewise constructor
    m.emplace(std::piecewise_construct,
              std::forward_as_tuple("c"),
              std::forward_as_tuple(10, 'c'));
    // as of C++17, m.try_emplace("c", 10, 'c'); can be used
 
    for (const auto &p : m) {
        std::cout << p.first << " => " << p.second << '\n';
    }
}

出力:

a => a
b => abcd
c => cccccccccc
d => ddd

[編集] 関連項目

ヒントを使用して要素をその場で構築します
(パブリックメンバ関数) [edit]
キーが存在しなければその場で挿入します。 キーが存在している場合は何もしません
(パブリックメンバ関数) [edit]
要素またはノード (C++17およびそれ以降)を挿入します
(パブリックメンバ関数) [edit]