、:
map_int.try_emplace(key, val);
これ、実際にいくつかの有用な情報を返します:
std::pair<std::map<obj1, obj2>::iterator, bool> p = map_int.try_emplace(key, val);
p.first
は、指定されたキーを持つ要素を指すイテレータです。
p.second
は、挿入が行われたかどうかを示します。
map_int.emplace(key, val)
でC++ 11でも同様の効果が得られますが、値のコピー/移動に関する微妙な違いがあります。
struct X { X(int, char, bool); };
std::map<int, X> m;
m.try_emplace(10, 20, 'x', false); // constructs X(20, 'x', false) if new
C++ 11で同様の動作が次のようになります:
m.emplace(
std::piecewise_construct,
std::forward_as_tuple(10),
std::forward_as_tuple(20, 'x', false));
が、これは 'マップ[キー] = val'が何をするかではないです:あなたは、目的のキーと値、例えばを含むそれを
std::pair
に合格する必要がありますか? – BarmarFWIW、C++ 11では、 'map.intsert({key、val});'を使うことができます。 –
@Barmarは、指定されたキーを持つ項目がある場合に値を置き換えます。指定されたキーを持つ項目がある場合、 'insert'は値を置き換えません。 –