58 votes

Suppression d'une clé d'une carte C++

Je voudrais supprimer une clé d'une carte STL. Cependant, map.erase() ne fait rien. Comment dois-je m'y prendre ?

88voto

paxdiablo Points 341644

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

12voto

bobobobo Points 17477

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" ) ;

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X