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

Jak zwrócić tablicę struktur / C++ ?

Ostatnio zmodyfikowano 2019-05-03 14:34
Autor Wiadomość
pekfos
» 2019-05-01 23:40:54
C/C++
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. » Kurs C++ » Poziom 5Wprowadzenie do standardowych algorytmów lekcja
P-174551
nanoant20
» 2019-05-02 09:03:06
dobra, na razie poległem, te warunki muszą być bardziej złożone, niż

C/C++
auto predykat =[]( const PUNKTY & a, const PUNKTY & b )
{
    return(( a.x < b.x ) &&( b.x < a.x ) );
};

muszę sobie to zwizualizowac (unaocznić, zilustrować),
P-174552
nanoant20
» 2019-05-02 17:12:55
Już poprawiłem
C/C++
//add compiler flag -std=c++11 or -std=c++14 or higher
#include <iostream>
#include <vector>   //for vector
#include <ctime>    //for srand
#include <algorithm>

using namespace std;

struct PUNKTY
{
    int x;
    int y;
};
void addpoint( std::vector < PUNKTY > & tablica ); //prototyp funkcji

void addpoint( std::vector < PUNKTY > & tablica ) //przekazywac przez referencje
{
    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 ) ) );
   
    /*ponizsza petelke zakomentowalem
        ale to ja nalezy uzyc w finalnym programie*/
    /*
        for( int i = 0; i < 10; i++ )
        {
            int a =( rand() % 80 ) + 1;
            int b =( rand() % 60 ) + 1;
   
            PUNKTY p = { a, b };
   
            tablica.push_back( p );
        }
        */
    //ta ponizsza petla posluzy mi do test'u
    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ść

P-174557
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 !
P-174561
1 « 2 »
Poprzednia strona Strona 2 z 2