Je voudrais supprimer une clé d'une carte STL. Cependant, map.erase()
ne fait rien. Comment dois-je m'y prendre ?
Réponses
Trop de publicités?Cela dépend entièrement de la façon dont vous l'appelez, mais il semble que vous utilisiez la fonction first,last
option. Si c'est le cas, vous devez garder à l'esprit qu'elle efface les éléments à partir de first
jusqu'à mais à l'exclusion de last
. Si vous respectez cette règle, la suppression par itérateur devrait fonctionner sans problème, que ce soit sous la forme d'un élément unique ou d'une plage.
Si vous effacez par clé, cela devrait aussi fonctionner, en supposant que la clé soit là, bien sûr.
L'exemple de code suivant montre les trois méthodes en action :
#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;
}
qui sort :
c => C
d => D
Vous devez trouver l'itérateur premièrement
map.erase( ITERATOR ) ;
Pour que cela soit sûr, vous devez cependant vous assurer que ITERATOR existe. Par exemple :
#include <stdio.h>
#include <map>
using namespace std ;
int main()
{
map<int,int> m ;
m.insert( make_pair( 1,1 ) ) ;
map<int,int>::iterator iter = m.find(1) ;
if( iter != m.end() )
m.erase( iter );
else puts( "not found" ) ;
}