Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie wektora zawierającego elementy klasy

Ostatnio zmodyfikowano 2015-09-06 22:41
Autor Wiadomość
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?
C/C++
#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 );
   
   
   
   
}
P-137291
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.
P-137292
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 :)
P-137293
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:
C/C++
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
P-137294
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ę.
P-137296
Lora
» 2015-09-06 17:49:01
C/C++
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.
P-137297
Monika90
» 2015-09-06 17:51:22
C/C++
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?

P-137298
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:

C/C++
return a.x < b.x;

[ \c pp ]
P-137299
« 1 » 2
  Strona 1 z 2 Następna strona