C++ STLのmultimap::erase()関数の使い方を徹底解説
本記事では、C++ STLにおけるmultimap::erase()関数の仕組み、構文、そして具体的な使用例について詳しく解説します。
C++ STLにおけるmultimapとは?
multimapは連想コンテナの一種で、mapコンテナと非常によく似た性質を持っています。キーと、それに対応付けられた値(マップドバリュー)の組み合わせからなる要素を、特定の順序で格納することができます。multimapの最大の特徴は、同じキーに対して複数の要素を関連付けられる点です。また、コンテナ内のデータは常にキーに基づいて自動的にソートされて管理されます。
multimap::erase()とは?
multimap::erase()は、C++ STLに標準で組み込まれている関数であり、<map>ヘッダーファイル内で定義されています。この関数は、multimapコンテナから要素を削除するために使用されます。
erase()は、「キーを指定して削除」「イテレータで位置を指定して削除」「開始位置と終了位置で範囲を指定して削除」の3通りの使い方が可能です。関数を実行すると、削除された要素の数だけmultimapコンテナのサイズが減少します。
構文
multimap_name.erase(key_type key); multimap_name.erase(const_iterator it); multimap_name.erase(const_iterator start, const_iterator end);
パラメータ
この関数は以下のパラメータを受け取ります。
key − 削除したい要素に関連付けられたキーを指定します。
it − 削除したい要素の位置を指すイテレータを指定します。
start, end − 削除対象となる要素の範囲を、開始位置から終了位置までで定義します。
戻り値
この関数は、コンテナから削除された要素の数を返します。
入力例
std::multimap<char, int> mymap;
mymap.insert({'a', 10});
mymap.insert({'b', 20});
mymap.insert({'c', 30});
mymap.erase('b');
出力例
a:10 c:30
使用例1:指定したキーの要素を削除する
#include<iostream>
#include<map>
using namespace std;
int main(){
multimap<int,char > mul_1;
// 要素を順に走査するためのイテレータを宣言
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'));
mul_1.insert(make_pair(4,'e'));
mul_1.insert(make_pair(5,'f'));
mul_1.insert(make_pair(6,'g'));
// erase()を呼び出して要素を削除
mul_1.erase(1);
mul_1.erase(4);
mul_1.erase(6);
mul_1.erase(5);
// multimap1の要素を表示
cout<<"Elements in multimap1 are: "<<"\n";
for( i = mul_1.begin(); i!= mul_1.end(); i++){
cout<<(*i).first<<" "<< (*i).second << "\n";
}
}
出力
上記のコードを実行すると、次のような出力が得られます。
Elements in multimap1 are: 0 a 2 c 3 d
使用例2:指定した範囲の要素を削除する
#include<iostream>
#include<map>
using namespace std;
int main(){
multimap<int,char > mul_1;
// 要素を順に走査するためのイテレータを宣言
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'));
mul_1.insert(make_pair(4,'e'));
mul_1.insert(make_pair(5,'f'));
mul_1.insert(make_pair(6,'g'));
// 削除前のmultimap1の要素を表示
cout<<"Elements in multimap1 are: "<<"\n";
for( i = mul_1.begin(); i!= mul_1.end(); i++){
cout<<(*i).first<<" "<< (*i).second << "\n";
}
// erase()を呼び出して範囲内の要素を一括削除
auto start = mul_1.find(3);
auto end = mul_1.find(6);
mul_1.erase(start, end);
// 削除後のmultimap1の要素を表示
cout<<"Elements in multimap1 are: "<<"\n";
for( i = mul_1.begin(); i!= mul_1.end(); i++){
cout<<(*i).first<<" "<< (*i).second << "\n";
}
}
出力
上記のコードを実行すると、次のような出力が得られます。
Elements in multimap1 are: 0 a 1 b 2 c 3 d 4 e 5 f 6 g Elements in multimap1 are: 0 a 1 b 2 c 6 g
使用例3:指定した位置の要素を削除する
#include<iostream>
#include<map>
using namespace std;
int main(){
multimap<int,char > mul_1;
// 要素を順に走査するためのイテレータを宣言
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'));
mul_1.insert(make_pair(4,'e'));
mul_1.insert(make_pair(5,'f'));
mul_1.insert(make_pair(6,'g'));
// 削除前のmultimap1の要素を表示
cout<<"Elements in multimap1 are: "<<"\n";
for( i = mul_1.begin(); i!= mul_1.end(); i++){
cout<<(*i).first<<" "<< (*i).second << "\n";
}
// erase()を呼び出して指定位置の要素を削除
auto first = mul_1.find(1);
mul_1.erase(first);
auto second = mul_1.find(6);
mul_1.erase(second);
auto third = mul_1.find(2);
mul_1.erase(third);
// 削除後のmultimap1の要素を表示
cout<<"Elements in multimap1 are: "<<"\n";
for( i = mul_1.begin(); i!= mul_1.end(); i++){
cout<<(*i).first<<" "<< (*i).second << "\n";
}
}
出力
上記のコードを実行すると、次のような出力が得られます。
Elements in multimap1 are: 0 a 1 b 2 c 3 d 4 e 5 f 6 g Elements in multimap1 are: 0 a 3 d 4 e 5 f
まとめ
multimap::erase()を使えば、キー指定・イテレータによる位置指定・範囲指定のいずれかの方法で、柔軟に要素を削除できます。キーを指定した場合は、そのキーに関連付けられたすべての要素が削除され、戻り値で削除件数を確認できるため、デバッグや動作検証にも役立ちます。用途に応じて適切な呼び出し形式を選択しましょう。
-
C++ STLのmap::erase()関数の使い方とサンプルコード解説
この記事では、C++ STLにおけるmap::erase()関数の動作、構文、および具体的な使用例について詳しく解説します。 C++ STLにおけるマップ(map)とは? マップは連想コンテナの一種で、キー(key)とマップ値(mapped value)の組み合わせからなる要素を、特定の順序で格納することができます。マップコンテナ内のデータは常にキーに基づいて内部的にソートされており、各要素には一意のキーを通じてアクセスします。 map::erase()関数とは? map::erase()は、<map>ヘッダーファイルに定義されている関数で、マップコンテナから特定の要素、または指定
-
C++のSTLでマルチマップ(multimap)を実装するプログラムの解説
マルチマップ(multimap)は、C++の標準テンプレートライブラリ(STL)が提供する連想コンテナの一つで、複数の要素が同じキーを持てるという点を除けば、マップ(map)とよく似ています。マルチマップでは、キー値とマップ値のペアそのものが一意である必要があります。使用する主な関数mm::find() – マルチマップ内でキー値 b を持つ要素を検索します。見つかった場合はその要素へのイテレータを、見つからない場合は end() イテレータを返します。mm::erase() – 指定したキー値(またはイテレータが指す要素)をマルチマップから削除します。mm::equal_range() –