Jak zwrócić tablicę struktur / C++ ?
Ostatnio zmodyfikowano 2019-05-03 14:34
pekfos |
» 2019-05-01 23:40:54 auto predykat =[]( const PUNKTY & a, const PUNKTY & b ) { return(( a.x < b.x ) ||( a.y < b.y ) ); }; |
(1,2)<(2,1) i (2,1)<(1,2), predykat nie jest poprawny dla sortowania. Wprowadzenie do standardowych algorytmów |
|
nanoant20 |
» 2019-05-02 09:03:06 dobra, na razie poległem, te warunki muszą być bardziej złożone, niż auto predykat =[]( const PUNKTY & a, const PUNKTY & b ) { return(( a.x < b.x ) &&( b.x < a.x ) ); };
muszę sobie to zwizualizowac (unaocznić, zilustrować), |
|
nanoant20 |
» 2019-05-02 17:12:55 Już poprawiłem #include <iostream> #include <vector> #include <ctime> #include <algorithm>
using namespace std;
struct PUNKTY { int x; int y; }; void addpoint( std::vector < PUNKTY > & tablica );
void addpoint( std::vector < PUNKTY > & tablica ) { PUNKTY p = { 21, 777 }; PUNKTY r = { 100, 200 }; PUNKTY s = { 21, 777 }; tablica.push_back( p ); tablica.push_back( r ); tablica.push_back( s ); }
bool compare( const PUNKTY & a, const PUNKTY & b ) { return(( a.x == b.x ) &&( a.y == b.y ) ); }
auto predykat =[]( const PUNKTY & a, const PUNKTY & b ) { return( a.x < b.x ) ||( a.x == b.x && a.y < b.y ); };
int main() { vector < PUNKTY > tablica; srand( static_cast < unsigned int >( time( NULL ) ) ); for( int i = 0; i < 1; i++ ) { PUNKTY a = { 20, 30 }; PUNKTY b = { 100, 20 }; PUNKTY c = { 100, 200 }; PUNKTY d = { 88, 1 }; PUNKTY e = { 8, 1 }; tablica.push_back( a ); tablica.push_back( b ); tablica.push_back( c ); tablica.push_back( d ); tablica.push_back( e ); } std::cout << "vector < PUNKTY > tablica; orginal" << std::endl; for( auto el: tablica ) std::cout << el.x << ' ' << el.y << std::endl; std::cout << '\n'; addpoint( tablica ); std::cout << "Po dodaniu" << std::endl; for( auto el: tablica ) std::cout << el.x << ' ' << el.y << std::endl; std::cout << '\n'; sort( tablica.begin(), tablica.end(), predykat ); std::cout << "po sortowaniu" << std::endl; for( int i = 0; i < tablica.size(); i++ ) { std::cout << tablica[ i ].x << " " << tablica[ i ].y << std::endl; } std::cout << std::endl; std::cout << "rm - remove duplicates" << std::endl; std::sort( tablica.begin(), tablica.end(), predykat ); auto last = std::unique( tablica.begin(), tablica.end(), compare ); tablica.erase( last, tablica.end() ); for( int i = 0; i < tablica.size(); i++ ) { std::cout << tablica[ i ].x << " " << tablica[ i ].y << std::endl; } std::cout << std::endl; std::cin.get(); std::cin.get(); return 0; }
@pekfos DZIĘKUJĘ za zwrócenie uwagi, wskazówki, cierpliwość i wyrozumiałość |
|
K1cek Temat założony przez niniejszego użytkownika |
» 2019-05-03 14:34:59 Dziękuje bardzo za odpowiedzi i poświęcony czas, to o wiele więcej niż oczekiwałem. Wprawdzie to jeszcze nie mój poziom programowania ale najwyraźniej czas na naukę, wielkie dzięki ! |
|
1 « 2 » |