std::map<Key,T,Compare,Allocator>::emplace
提供: cppreference.com
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) から構成される、ペアを返します 。
例外
何らかの操作によって例外が投げられた場合、この関数は何の効果も持ちません。
計算量
コンテナのサイズの対数。
例
Run this code
#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
関連項目
(C++11) |
ヒントを使用して要素をその場で構築します (パブリックメンバ関数) |
(C++17) |
キーが存在しなければその場で挿入します。 キーが存在している場合は何もしません (パブリックメンバ関数) |
| 要素またはノード (C++17以上)を挿入します (パブリックメンバ関数) |