C++ STLのmultimap::swap()関数を徹底解説!使い方とサンプルコード
この記事では、C++ STLにおけるmultimap::swap()関数の仕組み、構文、具体的な使用例について詳しく解説します。
C++ STLにおけるmultimapとは?
multimap(マルチマップ)は、mapコンテナとよく似た連想コンテナの一種です。キー値とマップされた値の組み合わせからなる要素を、特定の順序で格納することができます。multimapの最大の特徴は、同じキーに対して複数の要素を関連付けられるという点です。また、内部のデータは常にキーに基づいて自動的にソートされます。
multimap::swap()とは?
multimap::swap()は、C++ STLに組み込まれている関数で、<map>ヘッダーファイル内で定義されています。この関数は、2つのmultimapコンテナの中身を入れ替えるために使用されます。両方のmultimapコンテナのサイズが異なっていても、問題なく内容を交換できる点が特徴です。
この関数が呼び出されると、引数として渡された別のmultimapコンテナを受け取り、呼び出し元のコンテナと内容を入れ替えます。
構文
multimap_name.swap(multimap& multimap_name2);
パラメータ
この関数は以下のパラメータを受け取ります。
map_name2 − 呼び出し元のmultimapコンテナとデータを入れ替えたい、別のmultimapコンテナのオブジェクトです。
戻り値
この関数は何も返しません(void型)。
入力例
std::multimap<char, int>odd, eve;
odd.insert({'a', 1});
odd.insert({'b', 3});
odd.insert({'c', 5});
eve.insert({'d', 2});
eve.insert({'e', 4});
eve.insert({'f', 6});
odd.swap(eve);
出力結果
Odd: d: 2 e:4 f:6 Eve: a:1 b:3 c:5
使用例
以下は、multimap::swap()を使って2つのmultimapコンテナの要素を入れ替える実際のコード例です。
#include<iostream>
#include<map>
using namespace std;
int main(){
multimap<int,char > mul_1;
multimap<int,char>mul_2;
// 要素を走査するためのイテレータを宣言
multimap<int,char>:: iterator i;
// multimap1に要素を挿入
mul_1.insert(make_pair(0,'a'));
mul_1.insert(make_pair(1,'b'));
mul_1.insert(make_pair(2,'c'));
mul_1.insert(make_pair(3,'d'));
// multimap2に要素を挿入
mul_2.insert(make_pair(4,'e'));
mul_2.insert(make_pair(5,'f'));
mul_2.insert(make_pair(6,'g'));
// swapを呼び出して要素を入れ替える
mul_1.swap(mul_2);
// multimap1の要素を表示
cout<<"Elements in multimap1 are: "<<"\n";
for( i = mul_1.begin(); i!= mul_1.end(); i++){
cout<<(*i).first<<" "<< (*i).second << "\n";
}
// multimap2の要素を表示
cout<<"\nElements in multimap2 are: ";
for( i = mul_2.begin(); i!= mul_2.end(); i++){
cout<<(*i).first<<" "<< (*i).second << "\n";
}
}
出力
上記のコードを実行すると、以下のような出力が生成されます。
Elements in multimap1 are: 4 e 5 f 6 g Elements in multimap2 are: 0 a 1 b 2 c 3 d
このように、swap()を呼び出した後、mul_1には元々mul_2に格納されていた要素が、mul_2には元々mul_1に格納されていた要素がそれぞれ移っていることが確認できます。要素の入れ替えはポインタやイテレータの付け替えによって効率的に行われるため、全要素をコピーするよりも高速に処理できます。
-
C++ STLのlist insert()関数の使い方を徹底解説
本記事では、C++のSTLにおけるlistコンテナのinsert()関数の機能と使い方について詳しく解説します。 STLのlistとは listは、シーケンス内の任意の位置に対して定数時間での挿入と削除を可能にするコンテナです。listは双方向連結リストとして実装されており、非連続的なメモリ割り当てを行います。配列、vector、dequeと比較して、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は低速です。listはforward_listと似ていますが、forward_listは単方向連結リストで
-
C++ STLにおけるemplace()とinsert()の違いと使い方
C++ STLにおけるemplace操作は、オブジェクトの不要なコピーを回避し、insert操作よりも効率的に要素を挿入できる点が大きな特徴です。insert操作は既存オブジェクトへの参照を受け取るため、コンテナに挿入する際にコピー(またはムーブ)が発生します。一方、emplaceは渡された引数をコンテナ内で直接オブジェクトとして構築するため、余分なコストを抑えられます。emplaceとinsertの違いemplace(): 引数をコンテナに転送し、コンテナ内で直接オブジェクトを構築します(in-place構築)。一時オブジェクトの生成やコピーが不要なため効率的です。insert(): 既存の