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

Sortowanie tablic struktur - jak to zrobić?

Ostatnio zmodyfikowano 2018-01-27 22:26
Autor Wiadomość
Grzesiek11
Temat założony przez niniejszego użytkownika
Sortowanie tablic struktur - jak to zrobić?
» 2018-01-27 19:44:06
Witajcie. Chcę posortować tablicę struktur, tylko nie wiem jak to zrobić, gdyż zwykłe sposoby nie działają. Oto moja struktura:
C/C++
struct karta
{
    int kolor;
    int znak;
};
A tutaj kod sortujący:
C/C++
void sortuj( int tablica[], int rozmiar )
{
    for( int i = 0; i < rozmiar; i++ )
    {
        int index = najmniejszyPozostalySort( tablica, rozmiar, i );
        zamienSort( tablica, i, index );
    }
}

int najmniejszyPozostalySort( int tablica[], int rozmiar, int index )
{
    int indexNajmniejszy = index;
    for( int i = index + 1; i < rozmiar; i++ )
    {
        if( tablica[ i ] < tablica[ indexNajmniejszy ] )
        {
            indexNajmniejszy = i;
        }
    }
    return indexNajmniejszy;
}

void zamienSort( int tablica[], int pierwszyIndex, int drugiIndex )
{
    int temp = tablica[ pierwszyIndex ];
    tablica[ pierwszyIndex ] = drugiIndex;
    tablica[ drugiIndex ] = temp;
}
I teraz funkcja główna z przekierowaniem struktury do funkcji sortuj:
C/C++
void gra()
{
    karta kartyGracza[ 5 ];
    for( int i = 0; i < 5; i++ )
    {
        kartyGracza[ i ].znak = losuj( 1, 13 );
        kartyGracza[ i ].kolor = losuj( 1, 4 );
    }
    system( "cls" ); //tak, wiem bardzo zle zrobilem
    sortuj( kartyGracza.znak, 5 ); //tutaj jest przekierowanie
    for( int i = 0; i < 5; i++ )
    {
        cout << konwertZnak( kartyGracza[ i ].znak ) << " " << konwertKolor( kartyGracza[ i ].kolor ) << endl;
    }
    cin.ignore();
    cin.get();
}
A oto wynik:
error: request for member 'znak' in 'kartyGracza', which is of non-class type 'karta [5]'
error: name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]
P-169050
mateczek
» 2018-01-27 19:59:50
Zdefiniuj sobie operator, który pokaże która karta jest mniejsza. A potem tablice przekaż do funkcji sort.
C/C++
#include<vector>
#include<algorithm>
#include<iostream>
struct karta
{
    int kolor;
    int znak;
    karta( int k, int z )
        : kolor( k )
         , znak( z )
    {
       
    }
    bool operator <( const karta & k ) { //funkcja sort musi wiedzieć jak porównać twoje obiekty ten operator to jedno z rozwiązań
        return znak < k.znak;
    }
};

int main()
{
    std::vector < karta > talia { karta( 1, 2 ), karta( 1, 1 ), karta( 1, 5 ), karta( 1, 3 ), karta( 1, 4 ) };
    std::sort( talia.begin(), talia.end() );
    for( const karta & k: talia ) {
        std::cout << k.znak << " " << k.kolor << std::endl;
    }
}
P-169051
Honoratka
» 2018-01-27 22:22:57
<< removed >>
P-169055
mateczek
» 2018-01-27 22:26:35
@Honoratka Załóż nowy wątek, jak masz problem i nie generuj offtopu
P-169056
« 1 »
  Strona 1 z 1