std::vector mit pair: Bestimmte Elemente löschen?!
-
Folgendes Szenario:
typedef std::pair<Object*, int> ObjectPair; std::vector<ObjectPair> vecPairs; // Vector wird befüllt for(size_t i=0; i<vecPairs.size(); ++i) { vecPairs[i].second -= value; } // Jetzt würde ich gerne alle Paare entfernen, wo der int-Wert <= 0 ist. std::remove(vecPairs.begin(), vecPairs.end(), ?????);Wie löse ich das? Danke

-
-
Schreib dir eine Funktion, die genau diese Bedingung überprüft und gib' sie an remove_if() weiter:
bool negativ(const ObjectPair& val) { return val.second<=0; }PS: Dir ist schon klar, daß remove() und remove_if() keine Elemente ECHT löschen können? Die kopieren nur die Werte um und lassen am Ende einen unberührten Bereich, den du selber entsorgen mußt.
-
CStoll schrieb:
Schreib dir eine Funktion, die genau diese Bedingung überprüft und gib' sie an remove_if() weiter:
bool negativ(const ObjectPair& val) { return val.second<=0; }PS: Dir ist schon klar, daß remove() und remove_if() keine Elemente ECHT löschen können? Die kopieren nur die Werte um und lassen am Ende einen unberührten Bereich, den du selber entsorgen mußt.
Ja, dass ist mir klar

Ich bekomme noch folgenden Fehler:
algorithm(1815): error C2678: Binärer Operator '==': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'std::pair<_Ty1,_Ty2>' akzeptiert (oder keine geeignete Konvertierung möglich)Muss ich jetzt den Operator == definieren?
Kann ich die Funktion "negativ" eigentlich irgendwie auch als Klassenfunktion implementieren und übergeben?
-
Falscher Algorithmus - remove() vergleicht die Werte, du benötigst hier remove_if()