アプリ版:「スタンプのみでお礼する」機能のリリースについて

mapより特定の値を持つ要素を削除したいのですが、上手くいきません。
下のようなコードで実現しようとしたのですが、eraseを呼んだ次のループでもう一度eraseを呼んで実行時エラーとなってしまうようです。
erase後のイテレータが指す値が悪いのではないかとは思うのですが、実際に何が悪いのかご存知の方がいらっしゃればアドバイスをお願いいたします。

string s[20];
char c='a';
map<string,bool> m;
//mapへの要素の挿入
for(int j=0;j<20;j++){
s[j]=string(&c);
c++;
if(j%10==0)
m[s[j]]=true;
else
m[s[j]]=false;
}


map<string,bool>::iterator i;
//削除処理
for(i=m.begin();i!=m.end();i++){
if(i->second){
m.erase(i);
}
}

A 回答 (1件)

m.erase(i) すると iterator i の指す先が無くなるので、i++ できません。


そのものずばりのページがあったので、以下はそこを参照

要約すると、いっこ進んでから直前の要素を消す。

参考URL:http://www.sun-inet.or.jp/~yaneurao/intensive/cp …
    • good
    • 0
この回答へのお礼

ありがとうございます。
なるほど、これですっきりしました。

お礼日時:2007/03/20 18:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!