Ich habe versucht, eine Reihe von Elementen aus der Karte zu löschen, basierend auf einer bestimmten Bedingung. Wie mache ich das mit STL-Algorithmen?
Anfangs dachte ich an die Verwendung, remove_if
aber es ist nicht möglich, da remove_if für assoziative Container nicht funktioniert.
Gibt es einen äquivalenten "remove_if" -Algorithmus, der für die Karte funktioniert?
Als einfache Option dachte ich daran, die Karte zu durchlaufen und zu löschen. Aber ist das Durchlaufen der Karte und das Löschen eine sichere Option? (Da Iteratoren nach dem Löschen ungültig werden)
Ich habe folgendes Beispiel verwendet:
bool predicate(const std::pair<int,std::string>& x)
{
return x.first > 2;
}
int main(void)
{
std::map<int, std::string> aMap;
aMap[2] = "two";
aMap[3] = "three";
aMap[4] = "four";
aMap[5] = "five";
aMap[6] = "six";
// does not work, an error
// std::remove_if(aMap.begin(), aMap.end(), predicate);
std::map<int, std::string>::iterator iter = aMap.begin();
std::map<int, std::string>::iterator endIter = aMap.end();
for(; iter != endIter; ++iter)
{
if(Some Condition)
{
// is it safe ?
aMap.erase(iter++);
}
}
return 0;
}
for(auto iter=aMap.begin(); iter!=aMap.end(); ){ ....}
Unordnung reduzieren. Ruhe ist wie andere sagten. Diese Frage ersparte mir gerade einige Haarspalterei ;-)