Identische Punkte herausfiltern
-
Hallo Leute,
ich sammel Messdaten (X,Y) in einem Vektor. Dabei kommt es vor, dass ein und dieselbe Messung mehrmals vorkommt.
Danach prüfe ich in einer zweiten Schleife identische Punkte und schmeisse sie raus.
Meine Idee wäre jetzt sie schon beim einfügen zu entfernen. Gibt es da irgend einen STL container den ich dafür nehmen könnte?
Da X und Y in meinem Fall immer positiv sind dachte ich an Distanz ( x^2 + y^2 ) als eine art "ID" zu nehmen.
Kommt dafür irgend ein STL container in Frage? Oder gibt es da einen besseren Ansatz?
-
Std::set - std::unordered_set
Oder sortiert einfuegen und spaeter
std::uniquedraufhauen.
Oder sortiert einfuegen und beim Einfuegen testen.
-
Sicher das du dadurch Messungen entfernst und nicht Messwerte?
Irgendwie klingt deine "Problemlösung" komisch.Woher weisst du das in den Daten ein und dieselbe Messung mehrfach vorkommt und nicht einfach ein und der selbe Messwert?
-
ScottZhang schrieb:
Woher weisst du das in den Daten ein und dieselbe Messung mehrfach vorkommt und nicht einfach ein und der selbe Messwert?
Zu meinem Fall: Wenn mehrere Punkte dieselbe X und Y Koordinate haben dann ist es ein und derselbe Punkt. Es besteht kein Bedarf ihn mehrmals zu speichern und in die Berechnung einzuführen.
-
Laut dieser Grafik https://i.stack.imgur.com/G70oT.png wäre es unordered set oder unordered map. Der key ist für mich uniteressant also wäre es unordered_set.
explicit unordered_set ( size_type n = /* see below */, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() );Wie sähe beim oberen CTor die Funktion für den Vergleich für int oder double aus?
Wäre es nicht geschickter eine unordered_map oder sogar nur eine map zu nehmen um das Permanente key berechnen zu ersparen?
-
sadsadsada schrieb:
explicit unordered_set ( size_type n = /* see below */, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() );Wie sähe beim oberen CTor die Funktion für den Vergleich für int oder double aus?
Ich glaube meine Frage ist ein wenig unpräzise. Ich möchte nicht auf binäre Exaktheit prüfen, womit mir die standard hash und equal funktionen nichts bringen, sondern mit einem epsilon Wert. So etwas wie:
const auto test1 = abs( p1.x - p2.x ) > eps; const auto test2 = abs( p1.y - p2.y ) > eps; if( test1 && test2 ) { // Füge den Punkt ein }Muss ich dazu operator==() und operator<() ? in meine Klasse implementieren?
-
Hab es hingekriegt, danke an die Helfenden.