multimapの要素の削除方法について – プログラミング – Home

multimapの要素の削除方法につい...
 
通知
すべてクリア

multimapの要素の削除方法について


shimodate
 shimodate
(@shimodate)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

いつも大変、お世話になっております。
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;
}


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

multimap<string, string>::iterator itr = m.begin();
while ( itr != m.end() ) {
if ( itr->second == データ2) {
m.erase(itr++);
} else {
++itr;
}
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました