Как удалить определенную пару из С++ multimap?

#include <map>

...

multimap<char,int> first;

first.insert(pair<char,int>('a',10));
first.insert(pair<char,int>('b',15));
first.insert(pair<char,int>('b',20));
first.insert(pair<char,int>('c',25));

Скажем, теперь я хочу удалить одну из пар, которые я только что добавил на карту.

У меня есть примеры, чтобы удалить целую запись ключа, которая для ключа "b" удалит оба "b" , 15 и "b" , 20.

Но каков код для удаления, скажем, пары 'b', 20?

Ответы

Ответ 1

Вы можете использовать std::multimap<char, int>::equal_range, который даст вам диапазон итераторов, содержащий все пары, которые имеют определенный ключ. Поэтому, если вы ищете "b", вы получите диапазон итераторов, содержащий все пары, которые имеют "b" в качестве ключа.

Затем вы можете просто перебирать диапазон и стирать любую пару, которую вы видите, путем стирания итератора.

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; ++it) {
    if (it->second == 15) { 
        mymap.erase(it);
        break;
    }
}