2013-05-28 4 views
6

Ich habe eine Gruppe von Koordinaten zum Beispiel:Wie wird der Vektor von Punkten basierend auf einer Y-Achse sortiert?

10,40; 9,27; 5,68; 7,55; 8,15;

Wie sortiere ich diese Koordinaten, ohne die korrekte X-Achse der sortierten Y-Achse zu verlieren.

aus dem obigen Beispiel habe ich die Koordinaten sortiert werden soll, so dass die korrekte Ausgabe sein wird:

8,15; 9,27; 10,40; 7,55; 5,68.

Jeder Vorschlag wird sehr geschätzt. Danke.

Antwort

15

Documentation for std::sort

#include "opencv2/core/core.hpp" 
#include <algorithm> // std::sort 

// This defines a binary predicate that, 
// taking two values of the same type of those 
// contained in the list, returns true if the first 
// argument goes before the second argument 
struct myclass { 
    bool operator() (cv::Point pt1, cv::Point pt2) { return (pt1.y < pt2.y);} 
} myobject; 

int main() { 
    // input data 
    std::vector<cv::Point> pts(5); 
    pts[0] = Point(10,40); 
    pts[1] = Point(9,27); 
    pts[2] = Point(5,68); 
    pts[3] = Point(7,55); 
    pts[4] = Point(8,15); 

    // sort vector using myobject as comparator 
    std::sort(pts.begin(), pts.end(), myobject); 
} 
+0

vielen dank, du bist ein lebensretter. – anarchy99

+0

Sie sind willkommen – Alexey

+0

Hallo @Alex ist sehr nützlich, aber in meinem Fall gibt Fehler innerhalb der algorithm.cpp-Klasse "Keine passende Funktion für Aufruf für Objekt des Typs Myclass". – Madhubalan

1

Sie müssen angeben, wie genau Sie Ihre Koordinatengruppe speichern.

Der einfachste Weg besteht darin, sie als neue Struktur zu speichern, die Sie erstellen, und einen einfachen Blasensortieralgorithmus auf den oberen Bereich anzuwenden, wobei Sie den Y-Wert als Sortierparameter verwenden. Wenn Sie dann die Position der Strukturen "tauschen", bleiben die X & Y zusammen.

struct Vector { 
    float x; 
    float y; 
}; 
+0

Vielen Dank für Ihre Antwort, eigentlich speichere ich die Punkte mit 'std :: vector '. Haben Sie noch einen anderen Vorschlag, als ihn erneut in einer "Struktur" zu speichern? – anarchy99

0

Sie könnten eine Klasse erstellen, die eine Koordinate abbildet, und wenn Sie STL als Vektor verwenden, können Sie die sort method benutzen, um Ihre ganze Vektor auf der Y-Koordinate zu sortieren.

Here und here sind ähnliche Fragen aus dem Stapel.

+0

Vielen Dank für Ihren Vorschlag, von der Referenz, die Sie geschrieben haben, kann mir helfen, das Problem zu lösen. Ich werde es zuerst versuchen. – anarchy99

Verwandte Themen