sinoptico - Eliminar una clave de un mapa C++
que es un mapa mental (2)
Depende completamente de cómo lo llame, pero parece que está utilizando la first,last
opción. Si es así, debe tener en cuenta que borrará elementos empezando por el first
, hasta el last
pero excluyendo . Siempre que siga esa regla, la eliminación basada en iteradores debería funcionar bien, ya sea como un elemento único o como un rango.
Si está borrando por clave, entonces también debería funcionar, suponiendo que la clave está ahí, por supuesto.
El siguiente código de muestra muestra los tres métodos en acción:
#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;
}
qué salidas:
c => C
d => D
Me gustaría eliminar una clave de un mapa STL. Sin embargo, map.erase()
no hace nada. ¿Cómo voy a hacer esto?
Tendría que encontrar primero el iterador
map.erase( ITERATOR ) ;
Para que esto sea seguro, debe asegurarse de que ITERATOR exista, sin embargo. Por ejemplo:
#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" ) ;
}