Kefirek Temat założony przez niniejszego użytkownika |
» 2013-12-24 13:00:50 Do Adik80 No właśnie chciałbym aby funkcja sort sortowała mi nazy( tab czar ) uwzględniając całe wyrazy. czyli jak wprowadzę kolejno klientów o nazwie aba, aca, aaa. To program mi sortuje tak: aba, aca, aaa. Powinno(chciałbym aby sortowało) sortować: aaa, aba, aca. Pozdrawiam i czekam na sugestie Kefirek
|
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2013-12-24 13:11:15 Do DejaVu: No dobra "i" i "k", a co jeśli chodzi o sortowanie???? Pozdrawiam Kefirek |
|
pekfos |
» 2013-12-24 13:19:18 Zamiast j użyj std::min(x.nazwa.size(), y.nazwa.size()). A najlepiej po prostu zrób tak: return x.nazwa < y.nazwa;
(zakładam, że nazwa jest typu std::string) |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2013-12-24 13:33:23 Do Pekfos Niestety nazwa jest polem struktury tablicą typ char. Pozdrawiam Kefirek |
|
DejaVu |
» 2013-12-24 13:42:26 Ja bym do sortowania zalecał użyć std::sort, czyli:
std::sort( wektor.begin(), wektor.end() );
Jeżeli struktura danych w std::vector jest złożona i nie ma ona przeciążonego operatora < to wówczas trzeba dopisać sobie predykat binarny, tj.
bool porownajWektory( const TypDanych & dane1, const TypDanych & dane2 ) { return dane1.nazwa < dane2.nazwa; }
std::sort( wektor.begin(), wektor.end(), porownajWektory );
/edit:
http://cpp0x.pl/dokumentacja/predykat/326 |
|
pekfos |
» 2013-12-24 13:45:33 Niestety nazwa jest polem struktury tablicą typ char. |
W takim razie.. return std::string( x.nazwa ) < std::string( y.nazwa );
Lub tak: return std::string( x.nazwa ) < y.nazwa;
Zakładając, że trzymasz tam tekst w formie c-stringa. |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2013-12-24 13:46:57 Do DejaVu No właśnie tak mam zrobione: void Odczyt_do_ekranu() { ifstream do_ekranu( "Kontrahenci.txt", ios::in | ios::beg | ios::binary ); klient kup; cout << "Odczyt z pliku : " << endl; while( do_ekranu.read(( char * ) & kup, sizeof( kup ) ) ) { vektor.push_back( kup ); cout << vektor[ j ].nazwa << endl; cout << vektor[ j ].kg << endl; cout << vektor[ j ].price << endl; ++j; } sort( vektor.begin(), vektor.end(), Ksort ); cout << "Po sortowaniu :" << j << endl; for( int i = 0; i < j; i++ ) cout << vektor[ i ].nazwa << endl; }
bool Ksort( const klient & x, const klient & y ) { for( int i = 0; i < j; i++ ) if( x.nazwa[ i ] < y.nazwa[ i ] ) return true; else return false; }
ale funkcja Ksort nie sełnia moich oczekiwań to znaczy jak wprowadzę klienta o nazwie aab a potem aaa to sortowanie wygląda tak(kolejność) aab, aaa, a powinno być odwrotnie czyli aaa, aab. Pozdrawiam Kefirek |
|
DejaVu |
» 2013-12-24 13:49:30 bool Ksort( const klient & x, const klient & y ) { return x.nazwa < y.nazwa; }
Jeżeli dane sortują się w odwrotnej kolejności niż byś chciał, to:
bool Ksort( const klient & x, const klient & y ) { return x.nazwa > y.nazwa; }
/edit:
Jeżeli nazwa nie jest std::string, tylko char nazwa[123] to użyj:
return strcmp( x.nazwa, y.nazwa ) < 0;
return strcmp( x.nazwa, y.nazwa ) > 0;
|
|
1 « 2 » 3 |