STL <set> Was gilt als gleiche Objekte ?



  • Hi,

    ich habe eine Klasse mit string und double Attributen.
    Wenn ich in ein <set> Objekte einfüge werden die Doppelten ignoriert, also die bei denen Objekten die gleichen string haben, aber unterschiedliche double Werte.

    Meine Frage: Wie wird entschieden was als "gleich" gilt ? Wenn ich z.B keine Unterschiedlichen Double Werte (als Schlüssel) haben möchte, die auch gleiche strings haben können.

    Gruß
    Mokk



  • Mokk schrieb:

    Meine Frage: Wie wird entschieden was als "gleich" gilt ?

    Im Bezug auf das angegebene Sortierkriterium pred sind zwei Elemente äquivalent (nicht gleich im Sinne von operator== ), wenn

    !pred(a, b) && !pred(b, a)
    

    gilt. Wenn du also keine eigene Vergleichsfunktion übergibst, wird der operator< genommen, in dem Falle entspräche eine Äquivalenz der folgenden Bedingung:

    !(a < b) && !(b < a)
    


  • Dankeschön

    Noch ne Frage: Wo muss ich für ein Set ne Predicate Funktion übergeben wenn ich nicht den operator< benutzen will?

    Gruß
    Mokk



  • Das einfachste ist, einen Funktor mit überladenem operator() zu schreiben, der als Templateargument übergeben wird. Auf diese Weise kannst du einen Typ auch nach mehreren Kriterien sortieren.

    struct CompareAge
    {
        bool operator() (const Person& lhs, const Person& rhs)
        {
            return lhs.GetAge() < rhs.GetAge();
        }
    };
    
    std::set<Person, CompareAge> mySet;
    

    Siehe auch http://www.cplusplus.com/reference/stl/set


Log in to reply