2013-05-28 10 views
6

Ho un gruppo di coordinate ad esempio:Come ordinare il vettore di punti in base a un asse Y?

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

Come faccio a ordinare quelle coordinate, senza perdere la corretta asse X del ordinato y.

Dall'esempio voglio ordinare le coordinate così l'uscita corretta sarà:

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

Qualsiasi suggerimento sarà molto apprezzato. Grazie.

risposta

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

grazie mille, sei un live-saver. – anarchy99

+0

siete i benvenuti – Alexey

+0

Hi @alex sua molto utilmente, ma nel mio caso dà errore nella classe algorithm.cpp "No funzione di corrispondenza per la chiamata per oggetto di tipo myclass". – Madhubalan

1

è necessario specificare esattamente come si memorizzano il vostro gruppo di coordinate.

Il modo più semplice è archiviarli come una nuova struttura che si crea e applicare un algoritmo di ordinamento di bolle di base sopra di esso, utilizzando il valore Y come parametro di ordinamento. Poi, quando si "swap" la posizione delle struct, il X & Y stare insieme.

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

Grazie per la risposta, in realtà devo conservare i punti con 'std :: vector '. Hai qualche altro suggerimento oltre a riporlo in una 'struct'? – anarchy99

0

Si potrebbe creare una classe che associa una coordinata, e se si utilizza STL come vettore, è possibile utilizzare il sort method per ordinare il vostro intero vettore in base alla coordinata Y.

Here e here sono domande simili da stack.

+0

Grazie per il tuo suggerimento, dal riferimento che hai postato può aiutarmi a risolvere il problema. Lo proverò prima. – anarchy99

Problemi correlati