Ich möchte einen Schlüssel von einer STL-Karte entfernen. map.erase()
macht jedoch nichts. Wie würde ich das machen?
Es hängt ganz davon ab, wie Sie es nennen, aber es klingt, als ob Sie das first,last
Möglichkeit. In diesem Fall müssen Sie berücksichtigen, dass Elemente gelöscht werden, die mit first
bis zu ohnelast
beginnen. Vorausgesetzt, Sie befolgen diese Regel, sollte das iteratorbasierte Entfernen problemlos funktionieren, entweder als einzelnes Element oder als Bereich.
Wenn Sie mit dem Schlüssel löschen, sollte dies auch funktionieren, vorausgesetzt, der Schlüssel ist vorhanden.
Der folgende Beispielcode zeigt alle drei Methoden in Aktion:
#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;
}
welche Ausgänge:
c => C
d => D
Sie müssten finde den Iterator zuerst
map.erase( ITERATOR ) ;
Um dies sicher zu machen, müssen Sie jedoch sicherstellen, dass ITERATOR vorhanden ist. Gleiches Beispiel:
#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" ) ;
}