Asahel Temat założony przez niniejszego użytkownika |
Sortowanie wektora zawierającego elementy klasy » 2015-09-06 16:18:30 Jak w temacie mam punkty (x,y) które wsadzam do wektora. Jak posortować wektor po współrzędnej x? #include<iostream> #include<vector> #include <algorithm> using namespace std;
class wsp { public: int x; int y; wsp( int xx, int yy ); };
wsp::wsp( int xx, int yy ) : x( xx ) , y( yy ) { };
vector < wsp > tab;
int main() { int a, b; while( cin >> a >> b ) { tab.push_back( wsp( a, b ) ); } sort( tab.sort(), tab.sort(), wsp::x ); }
|
|
pekfos |
» 2015-09-06 17:01:30 Jak posortować wektor po współrzędnej x? |
Zapewne zgodnie z definicją funkcji sort().. Trzeci argument to dwuargumentowy predykat. |
|
Asahel Temat założony przez niniejszego użytkownika |
» 2015-09-06 17:04:05 Czy możesz napisać jak to ma wygladać? U góry chyba próbowałem w ten sposób co masz na myśli, ale nie działa :) |
|
Fireho |
» 2015-09-06 17:21:11 Musisz napisać funkcję, która przyjmuje dwa wsp / const wsp & i porównuje współrzędną x. Przykład: bool compare_points_by_x( const wsp & a, const wsp & b ) { return a.x < b.x; } Albo użyć wyrażeń lambda: []( const wsp & a, const wsp & b ) { return a.x < b.x; } @edit fakt, mój błąd |
|
Asahel Temat założony przez niniejszego użytkownika |
» 2015-09-06 17:26:55 Za cholerę tego nie rozumiem, bo dopiero uczę się C++. Ja nie chcę pisać nowej funkcji. Ja chcę skorzystać w gotowej funkcji sort() z algorithm. Problem jest taki, że nie wiem jak ma wyglądać składnia i nigdzie tego znaleźć w internecie nie mogę. |
|
Lora |
» 2015-09-06 17:49:01 std::sort( tab.begin(), tab.end(), compare_points_by_x );
Pierwszy argument to iterator wskazujący na początek vectora, drugi to iterator wskazujący na koniec vectora, a trzeci to wskaźnik na funkcję porównującą dwa elementy (np. na taką jaką napisał Fireho). Możesz też przeciążyć operator < dla tej klasy i użyć funkcji sort z dwoma argumentami. nigdzie tego znaleźć w internecie nie mogę.
| http://www.cplusplus.com/reference/algorithm/sort/?kw=sort. |
|
Monika90 |
» 2015-09-06 17:51:22 bool compare_points_by_x( const wsp & a, const wsp & b ) { return std::less( a.x, b.x ); }
|
Po co std::less, na dodatek źle? |
|
Asahel Temat założony przez niniejszego użytkownika |
» 2015-09-06 18:01:14 Zaczynam po woli rozumieć. Czy ktoś może objaśnić do czego służy ta linijka: return a.x < b.x;
[ \c pp ] |
|
« 1 » 2 |