Sortowanie tablic struktur - jak to zrobić?
Ostatnio zmodyfikowano 2018-01-27 22:26
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: struct karta { int kolor; int znak; }; A tutaj kod sortujący: 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: 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" ); sortuj( kartyGracza.znak, 5 ); 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] |
|
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. #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 ) { 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; } } |
|
Honoratka |
» 2018-01-27 22:22:57 << removed >> |
|
mateczek |
» 2018-01-27 22:26:35 @Honoratka Załóż nowy wątek, jak masz problem i nie generuj offtopu |
|
« 1 » |