いつも大変、お世話になっております。
multimapの要素の削除について、教えて頂けますでしょうか。
以下の簡単なサンプルで、secondがデータ2の要素を削除して、最終的には、
キー1 データ1
キー1 データ3
キー2 データ1
キー2 データ3
キー3 データ1
キー3 データ3
のようにしたいと思っています。実際に実行したところ、erase()を実行した後はイタレ
ータが無効になるらしく、次回のループでエラーとなってしまいます。
何かよい方法はありますでしょうか?
#すみません。「multimapのキーを収集する方法」に関しては、まだ、レスの内容を
#消化しきれていないので、もう少しお待ちください。
// test3.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include stdafx.h
#include <map>
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
multimap<string, string> m;
m.insert(pair<string, string>(キー1, データ1));
m.insert(pair<string, string>(キー1, データ2));
m.insert(pair<string, string>(キー1, データ3));
m.insert(pair<string, string>(キー2, データ1));
m.insert(pair<string, string>(キー2, データ2));
m.insert(pair<string, string>(キー2, データ3));
m.insert(pair<string, string>(キー3, データ1));
m.insert(pair<string, string>(キー3, データ2));
m.insert(pair<string, string>(キー3, データ3));
for(multimap<string, string>::iterator itr = m.begin(); itr != m.end();
itr++)
{
string first = itr->first;
string second = itr->second;
if(second == データ2)
{
m.erase(itr);
}
}
for(multimap<string, string>::iterator itr = m.begin(); itr != m.end();
itr++)
{
string first = itr->first;
string second = itr->second;
cout << first << << second << \n;
}
return 0;
}
multimap<string, string>::iterator itr = m.begin();
while ( itr != m.end() ) {
if ( itr->second == データ2) {
m.erase(itr++);
} else {
++itr;
}
}