如果您需要在第一次匹配后继续迭代,您需要首先检索下一个元素的迭代器,因为擦除的迭代器无效。
从 C++11 开始,实现此目的的一种方法是使用擦除函数的返回值,该函数是删除最后一个元素之后的元素的迭代器(或 multimap::end,如果最后一个元素被删除) . 请注意基于键的版本返回已擦除元素的数量,而不是迭代器。
建立在有价值的 Charles Salvia 答案之上,展示如何擦除 (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;
}