K1cek Temat założony przez niniejszego użytkownika |
» 2019-06-07 17:52:33 I tak coś nie gra z tym moim sortowaniem, także gratulacje niezasłużone, przy danych wejściowych w txt:
gracz1 123 gracz2 322 gracz3 922 gracz4 394 gracz5 1232 gracz5 1232 na wyjściu mam: Imie - gracz5 WYNIK 1232 Imie - gracz3 WYNIK 922 Imie - gracz4 WYNIK 394 Imie - gracz2 WYNIK 322 Imie - gracz1 WYNIK 123 Imie - gracz5 WYNIK 1232
Rozumiem, że metoda sort() jest wydajniejsza i proszę mi wierzyć, gdybym wiedział jak to bym ją zastosował, narazie mogę jedynie o niej poczytać.
Dzięki za wyczerpującą wypowiedź, mój wyżej opisany błąd jest pewnie skutkiem moich wcześniejszych błędów, zaraz postaram się to doprowadzić do ładu, dzięki ! |
|
pekfos |
» 2019-06-07 18:01:08 for( int count1 = 1; count1 < vect.size() - 1; count1++ )
|
Usuń te -1. Rozumiem, że metoda sort() jest wydajniejsza i proszę mi wierzyć, gdybym wiedział jak to bym ją zastosował |
Przykład jest w lekcji, którą podałem. std::sort( wektor.begin(), wektor.end(), predykat );
|
Wystarczy napisać funkcję bool predykat(const DANE& l, const DANE& r), która określa kryterium sortowania. |
|
K1cek Temat założony przez niniejszego użytkownika |
» 2019-06-07 18:05:40 Usunąłem -1 i faktycznie działa. Zabieram się za czytanie. |
|
Jacob99 |
» 2019-06-07 18:11:10 std::sort() jest bardzo prosta w użyciu:
std::vector < DANE > data;
std::sort( data.begin(), data.end(),[]( DATA first, DATA second ) { return first.wynik > second.wynik; } );
Opis std::sort masz tutaj: https://en.cppreference.com/w/cpp/algorithm/sort |
|
K1cek Temat założony przez niniejszego użytkownika |
» 2019-06-07 19:07:55 Dzięki Jacob99, zastosowałem się jednak - bo jak na pierwszy raz wydała mi się bardziej przejrzysta - do zalecenia pekfosa teraz mam coś takiego, zrezygnowałem z tej funkcji sortującej - sortuje metodą sort: #include <iostream> #include <fstream> #include <conio.h> #include <string> #include <sstream> #include <iterator> #include <vector> #include <algorithm> #include <limits>
using namespace std;
struct DANE { string imiona; int wyniki; };
bool predykat( DANE l, DANE r ) { return l.wyniki > r.wyniki; }
void odczyt() { vector < DANE > mojWektor; DANE Wyniki; fstream plik; plik.open( "dane.txt", ios::in ); string linijka; if( plik.good() ) { while( true ) { getline( plik, Wyniki.imiona ); plik >> Wyniki.wyniki; if( plik.fail() ) { break; } plik.ignore( numeric_limits < streamsize >::max(), '\n' ); mojWektor.push_back( Wyniki ); } sort( mojWektor.begin(), mojWektor.end(), predykat ); for( int i = 0; i < mojWektor.size(); i++ ) { cout << "Imie - " << mojWektor[ i ].imiona << " WYNIK " << mojWektor[ i ].wyniki << endl; } plik.close(); } else { cout << "Error! Nie udalo otworzyc sie pliku!" << endl; } } int main() { odczyt(); return 0; }
|
|
K1cek Temat założony przez niniejszego użytkownika |
» 2019-06-07 20:43:56 Wszystko działa, dzięki za pomoc, spróbuje jeszcze według Twoich zaleceń pekfos udoskonalić ten kod, temat zamykam. |
|
1 « 2 » |