std::multimap<Key,T,Compare,Allocator>:: emplace
|
(C++17)
|
||||
| Sequence | ||||
|
(C++11)
|
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
|
(C++11)
|
||||
| Associative | ||||
| Unordered associative | ||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
|
(C++11)
|
||||
| Adaptors | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
| Views | ||||
|
(C++20)
|
||||
|
(C++23)
|
||||
| Tables | ||||
| Iterator invalidation | ||||
| Member function table | ||||
| Non-member function table |
| Member functions | |||||||||||||||||||||||||||
| Non-member functions | |||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
| Deduction guides (C++17) | |||||||||||||||||||||||||||
|
template
<
class
...
Args
>
iterator emplace ( Args && ... args ) ; |
(C++11以降)
(constexpr C++26以降) |
|
与えられた args を使用して、その場で構築された新しい要素をコンテナに挿入します。
新しい要素のコンストラクタ(すなわち
std::
pair
<
const
Key, T
>
)は、
emplace
に提供された引数と全く同じ引数で呼び出され、
std::
forward
<
Args
>
(
args
)
...
を介して転送されます。
value_type
が
EmplaceConstructible
ではなく、
args
から
multimap
への構築が不可能な場合、動作は未定義です。
イテレータおよび参照は無効化されません。
目次 |
パラメータ
| args | - | 要素のコンストラクタに転送する引数 |
戻り値
挿入された要素へのイテレータ。
例外
何らかの理由で例外がスローされた場合、この関数は何も効果を持ちません( strong exception safety guarantee )。
計算量
コンテナのサイズに対して対数的。
注記
emplace
の注意深い使用により、新しい要素を不必要なコピー操作やムーブ操作を回避しながら構築することが可能です。
例
#include <iostream> #include <string> #include <utility> #include <map> int main() { std::multimap<std::string, std::string> m; // pairのムーブコンストラクタを使用 m.emplace(std::make_pair(std::string("a"), std::string("a"))); // pairの変換ムーブコンストラクタを使用 m.emplace(std::make_pair("b", "abcd")); // pairのテンプレートコンストラクタを使用 m.emplace("d", "ddd"); // 重複キーでのemplace m.emplace("d", "DDD"); // pairのピースワイズコンストラクタを使用 m.emplace(std::piecewise_construct, std::forward_as_tuple("c"), std::forward_as_tuple(10, 'c')); for (const auto& p : m) std::cout << p.first << " => " << p.second << '\n'; }
出力:
a => a b => abcd c => cccccccccc d => ddd d => DDD
関連項目
|
(C++11)
|
ヒントを使用して要素をその場で構築する
(公開メンバ関数) |
|
要素を挿入する
またはノード
(C++17以降)
(公開メンバ関数) |