2013-05-28 10 views
6

Mam grupę współrzędnych, na przykład:Jak sortować wektor punktów na podstawie osi Y?

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

Jak sortować te współrzędne bez utraty prawidłowej osi X posortowanej osi Y.

Z powyższego przykładu chcę sortować współrzędne więc prawidłowe wyjście będzie:

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

Każda sugestia zostanie bardzo doceniona. Dziękuję.

Odpowiedz

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

Dziękuję bardzo, jesteś oszczędzającym na żywo. – anarchy99

+0

serdecznie zapraszamy – Alexey

+0

Witam @Alex jest bardzo użyteczny, ale w moim przypadku daje błąd w klasie algorithm.cpp "Brak pasującej funkcji dla wywołania obiektu typu myclass". – Madhubalan

1

Musisz określić, jak dokładnie przechowujesz swoją grupę współrzędnych.

Najprostszym sposobem jest zapisanie ich jako nowej struktury, którą tworzysz i stosowanie podstawowego algorytmu sortowania bąbelkowego na wierzchu, używając wartości Y jako parametru sortowania. Następnie, gdy "zamienisz" pozycję struktur, X & Y pozostają razem.

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

Dziękuję za odpowiedź, faktycznie przechowywać punkty z 'std :: vector '. Czy masz jakieś inne sugestie oprócz przechowywania go ponownie w "strukturze"? – anarchy99

0

Można utworzyć klasę, która mapuje koordynować, a jeśli używasz STL jako wektor, można użyć sort method uporządkować całe wektor na podstawie współrzędnej Y.

Here i here są podobne pytania ze stosu.

+0

Dziękuję za sugestię, z zamieszczonego odniesienia może mi pomóc rozwiązać problem. Najpierw spróbuję. – anarchy99