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()


Anmelden zum Antworten