この投稿では、C++でマップに要素を挿入する方法について説明します。

1.使用する std::map::insert

マップに新しい要素を挿入するための標準的な解決策は、 std::map::insert 関数。キーがまだ存在しない場合にのみ、指定されたキーと値のペアをマップに挿入します。キーがマップにすでに存在する場合、要素は挿入されません。

ダウンロード  コードを実行する

出力:

{1, A}
{2, B}
{3, C}
{4, D}
{5, E}

 
これは、以下を使用するコードと機能的に同等です。 std::make_pair を生成する std::pair<> テンプレート控除を介して。

ダウンロード  コードを実行する

出力:

{1, A}
{2, B}
{3, C}
{4, D}

 
または、さらに短く、リスト初期化構文を使用します。

ダウンロード  コードを実行する

出力:

{1, A}
{2, B}
{3, C}
{4, D}

2.使用する operator[]

The std::map::insert キーがすでに存在する場合、関数は指定されたキーと値のペアをマップに挿入しません。既存のキーの古い値を上書きするには、次を使用できます operator[].

ダウンロード  コードを実行する

出力:

{1, D}
{2, B}
{3, C}

 
C++ 17では、 std::map を導入しました std::map::insert_or_assign 挿入機能。に似ています operator[]、ただし、より多くの情報を返し、マップされたタイプのデフォルトの構成可能性を必要としません。

ダウンロード  コードを実行する

出力:

{1, D}
{2, B}
{3, C}

3.使用する std::map::emplace

The std::map::emplace キーがまだ存在しない場合、関数は新しい要素をマップコンテナに挿入します。次のように使用できます。

ダウンロード  コードを実行する

出力:

{1, A}
{2, B}
{3, C}
{4, D}

 
C++ 17では、 std::map を導入しました std::map::try_emplace 関数。それは次のように動作します std::map::emplace、ただし、挿入が発生しない場合(キーはマップにすでに存在します)、右辺値引数から移動しません。例えば、

ダウンロード  コードを実行する

出力:

{1, A}
{2, B}
{3, C}

これで、C++のマップに要素を挿入することができます。