map::emplace
インプレースで構築された (コピーまたは移動操作が実行されない) 要素をマップに挿入します。
template<class... Args>
pair<iterator, bool> emplace(
Args&&... args);
パラメーター
パラメーター |
説明 |
args |
値が同じ順序付けになる要素がマップにまだ含まれていない場合に、マップに挿入される要素を構築するために転送される引数。 |
戻り値
pair。その bool コンポーネントは、挿入が行われた場合は true を返し、マップに既に順序の値が等しい要素が含まれている場合は false を返します。 戻り値であるペアの反復子コンポーネントは、bool コンポーネントが true の場合は新しく挿入される要素を指し、bool コンポーネントが false の場合は既存の要素を指します。
pair pr の反復子コンポーネントにアクセスするには、pr.first を使用します。これを逆参照するには、*pr.first を使用します。 bool コンポーネントにアクセスするには、pr.second を使用します。 例については、この記事で後ほど説明するサンプル コードを参照してください。
解説
この関数では、反復子や参照は無効になりません。
配置の実行中、例外がスローされるとコンテナーの状態は変更されません。
要素の value_type はペアを表します。これにより、要素の値は順序付けされたペアになり、このペアの最初のコンポーネントはキー値と同じで、2 番目のコンポーネントは要素のデータ値と同じになります。
使用例
// map_emplace.cpp
// compile with: /EHsc
#include <map>
#include <string>
#include <iostream>
using namespace std;
template <typename M> void print(const M& m) {
cout << m.size() << " elements: ";
for (const auto& p : m) {
cout << "(" << p.first << ", " << p.second << ") ";
}
cout << endl;
}
int main()
{
map<int, string> m1;
auto ret = m1.emplace(10, "ten");
if (!ret.second){
auto pr = *ret.first;
cout << "Emplace failed, element with key 10 already exists."
<< endl << " The existing element is (" << pr.first << ", " << pr.second << ")"
<< endl;
cout << "map not modified" << endl;
}
else{
cout << "map modified, now contains ";
print(m1);
}
cout << endl;
ret = m1.emplace(10, "one zero");
if (!ret.second){
auto pr = *ret.first;
cout << "Emplace failed, element with key 10 already exists."
<< endl << " The existing element is (" << pr.first << ", " << pr.second << ")"
<< endl;
}
else{
cout << "map modified, now contains ";
print(m1);
}
cout << endl;
}
出力
map modified, now contains 1 elements: (10, ten)
Emplace failed, element with key 10 already exists.
The existing element is (10, ten)
必要条件
ヘッダー: <map>
名前空間: std