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 vonoperator==
), 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