最初の一致後に反復を続行する必要がある場合は、消去されたイテレータが無効になるため、最初に次の要素へのイテレータを取得する必要があります。
これを実現する1つの方法は、C ++ 11以降、最後に削除された要素(または、最後の要素が削除された場合はmultimap :: end)に続く要素へのイテレーターであるerase関数の戻り値を使用することです。 。キーベースのバージョンは、イテレータではなく、消去された要素の数を返すことに注意してください。
貴重なチャールズサルビアの答えの上に構築し、(b、15)ペアを消去する方法を示すと、次のようになります
multimap<char,int> mymap;
mymap.insert(pair<char,int>('a',10));
mymap.insert(pair<char,int>('b',15));
mymap.insert(pair<char,int>('b',20));
mymap.insert(pair<char,int>('c',25));
typedef multimap<char, int>::iterator iterator;
std::pair<iterator, iterator> iterpair = mymap.equal_range('b');
// Erase (b,15) pair
//
iterator it = iterpair.first;
for (; it != iterpair.second; ) {
if (it->second == 15) {
it=mymap.erase(it);
}
else
++it;
}