C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのmultimap::insert()関数の使い方を徹底解説

本記事では、C++ STLにおける multimap::insert() 関数の動作、構文、そして具体的な使用例について詳しく解説します。

C++ STLにおけるmultimapとは?

multimap(マルチマップ)は、mapコンテナとよく似た連想コンテナの一つです。キー(key)と値(value)の組み合わせで構成される要素を、特定の順序で格納することができます。mapとの最大の違いは、同じキーに対して複数の要素を関連付けられるという点です。また、コンテナ内部のデータは常にキーに基づいて自動的にソートされて管理されます。

multimap::insert()とは?

multimap::insert() はC++ STLに標準で組み込まれている関数で、<map> ヘッダーファイル内で定義されています。この関数は、multimapコンテナに新しい要素を挿入するために使用され、挿入された要素の数だけコンテナのサイズが増加します。

mapコンテナでは、同一のキーがすでに存在する場合、その要素は挿入されません。一方、multimapには同じキーに複数の要素を関連付けられるという特徴があります。

そのため、要素を挿入すると、そのキーに応じた適切な位置へ自動的に配置されます。

構文

multiMap_name.insert({key& k, value_type& val});

または

multiMap_name.insert(iterator& it, {key& k, value_type& val});

または

multiMap_name.insert(iterator& position1, iterator& position2);

または

multimap_name.insert(initializer_list <value_type> il);

パラメータ

この関数は、以下のパラメータを受け取ります。

  • k − 挿入する要素に関連付けるキーです。multimapでは同じキーを持つ要素がすでに存在していても、重複して挿入することが可能です。

  • val − コンテナに挿入する値です。

  • it − 要素を挿入する位置のヒントを与えるためのイテレータです。

  • position1, position2 − 複数の要素を一括で挿入したい場合に使用します。position1が範囲の開始位置、position2が範囲の終了位置を表し、この範囲内にある複数の要素がまとめて挿入されます。

  • il − コンテナを初期化したい要素を含む初期化リスト(initializer_list)です。

戻り値

この関数は、新しく挿入された要素を指すイテレータを返します。

入力

multimap<int, char> mymap;
mymap.insert({1, 'a'});
mymap.insert({2, 'b'});

出力

1: a
2: b

使用例1:キーを指定して要素を挿入する

#include <bits/stdc++.h>
using namespace std;
int main(){
   multimap<int, int> mul;
   //multimapに要素を挿入
   mul.insert({ 1, 10 });
   mul.insert({ 2, 20 });
   mul.insert({ 3, 30 });
   mul.insert({ 4, 40 });
   mul.insert({ 5, 50 });
   //multimapの要素を表示
   cout << "Elements in multimap is : \n";
   cout << "KEY\tELEMENT\n";
   for (auto it = mul.begin(); it!= mul.end(); ++it){
      cout << it->first << '\t' << it->second << '\n';
   }
   return 0;
}

出力

上記のコードを実行すると、次のような出力が得られます。

Elements in multimap is :
KEY ELEMENT
1 10
2 20
3 30
4 40
5 50

使用例2:指定したキーの後ろに要素を挿入する

//指定したキーの後に要素を挿入する
#include <bits/stdc++.h>
using namespace std;
int main(){
   multimap<int, int> mul;
   //multimapに要素を挿入
   mul.insert({ 1, 10 });
   mul.insert({ 2, 20 });
   mul.insert({ 3, 30 });
   mul.insert({ 5, 40 });
   mul.insert({ 6, 50 });
   //挿入位置の基準となる要素を検索
   auto i = mul.find(3);
   mul.insert(i, { 4, 90 });
   //要素を表示
   cout << "KEY\tELEMENT\n";
   for (auto itr = mul.begin(); itr!= mul.end(); ++itr){
      cout << itr->first << '\t' << itr->second << '\n';
   }
   return 0;
}

出力

上記のコードを実行すると、次のような出力が得られます。

KEY ELEMENT
1 10
2 20
3 30
4 90
5 40
6 50
  1. C++ STLのlist insert()関数の使い方を徹底解説

    本記事では、C++のSTLにおけるlistコンテナのinsert()関数の機能と使い方について詳しく解説します。 STLのlistとは listは、シーケンス内の任意の位置に対して定数時間での挿入と削除を可能にするコンテナです。listは双方向連結リストとして実装されており、非連続的なメモリ割り当てを行います。配列、vector、dequeと比較して、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は低速です。listはforward_listと似ていますが、forward_listは単方向連結リストで

  2. C++ STLにおけるemplace()とinsert()の違いと使い方

    C++ STLにおけるemplace操作は、オブジェクトの不要なコピーを回避し、insert操作よりも効率的に要素を挿入できる点が大きな特徴です。insert操作は既存オブジェクトへの参照を受け取るため、コンテナに挿入する際にコピー(またはムーブ)が発生します。一方、emplaceは渡された引数をコンテナ内で直接オブジェクトとして構築するため、余分なコストを抑えられます。emplaceとinsertの違いemplace(): 引数をコンテナに転送し、コンテナ内で直接オブジェクトを構築します(in-place構築)。一時オブジェクトの生成やコピーが不要なため効率的です。insert(): 既存の