Ответ 1
Все зависит от того, как вы его вызываете, но похоже, что вы можете использовать опцию first,last
. Если да, вам нужно иметь в виду, что он стирает элементы, начиная с first
, но исключая last
. Если вы следуете этому правилу, удаление на основе итератора должно работать нормально, либо как один элемент, либо диапазон.
Если вы стираете ключ, тогда он также должен работать, предполагая, что ключ находится там, конечно.
Следующий пример кода показывает все три метода в действии:
#include <iostream>
#include <map>
int main (void) {
std::map<char,char> mymap;
std::map<char,char>::iterator it;
mymap['a'] = 'A'; mymap['b'] = 'B'; mymap['c'] = 'C';
mymap['d'] = 'D'; mymap['e'] = 'E'; mymap['f'] = 'F';
mymap['g'] = 'G'; mymap['h'] = 'H'; mymap['i'] = 'I';
it = mymap.find ('b'); // by iterator (b), leaves acdefghi.
mymap.erase (it);
it = mymap.find ('e'); // by range (e-i), leaves acd.
mymap.erase (it, mymap.end());
mymap.erase ('a'); // by key (a), leaves cd.
mymap.erase ('z'); // invalid key (none), leaves cd.
for (it = mymap.begin(); it != mymap.end(); it++)
std::cout << (*it).first << " => " << (*it).second << '\n';
return 0;
}
который выводит:
c => C
d => D