Как удалить определенную пару из C ++ MultiMap?
-
08-10-2019 - |
Вопрос
#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?
Решение
Вы можете использовать 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;
}
}
Не связан с StackOverflow