[C++] Sortowanie danych algorytmem stable_sort
Ostatnio zmodyfikowano 2015-05-19 19:27
KiddingMe Temat założony przez niniejszego użytkownika |
[C++] Sortowanie danych algorytmem stable_sort » 2015-05-19 18:21:07 Staram się użyć wspomnianego algorytmu tak, by otrzymać wektor posortowany według długości stringu, a jednocześnie stringi z identyczną długością mają być posortowane alfabetycznie. #include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std;
int main() { vector < string > tekst { "caa", "c", "dddd", "eeeee", "eeeea", "ggggggg", "a", "bb", "cc", "dd", "aa", "ab" }; stable_sort( tekst.begin(), tekst.end(),[]( const string & a, const string & b ) { return a.size() < b.size(); } ); for( auto i = tekst.begin(); i != tekst.end(); ++i ) { cout <<* i << "|"; } return 0; }
Wyświetla mi wynik: c|a|bb|cc|dd|aa|ab|caa|dddd|eeeee|eeeea|ggggggg| Jeśli dobrze myślę, to wynik powinien być(taki chcę osiągnąć): a|c|aa|ab|bb|cc|dd|caa|dddd|eeeea|eeeee|ggggggg| Wytłumaczy mi ktoś, co robię źle? |
|
notabigthreat |
» 2015-05-19 18:46:25 Chyba na razie sortujesz tylko po rozmiarze? |
|
KiddingMe Temat założony przez niniejszego użytkownika |
» 2015-05-19 19:10:02 Poprawny wynik udaje się uzyskać dodając linijkę sort(tekst.begin(),tekst.end()); przed stable_sort. Czy Stable_sort powinien wykonać to sam - alfabetycznie z uwzględnieniem rozmiarów stringów? Po to dostaje tą lambde jako trzeci argument. |
|
Monika90 |
» 2015-05-19 19:20:35 Staram się użyć wspomnianego algorytmu tak, by otrzymać wektor posortowany według długości stringu, a jednocześnie stringi z identyczną długością mają być posortowane alfabetycznie. |
Do tego nie potrzeba stable_sort, wystarczy sort( tekst.begin(), tekst.end(),[]( const string & a, const string & b ) { return a.size() < b.size() || a.size() == b.size() && a < b; } );
|
|
KiddingMe Temat założony przez niniejszego użytkownika |
» 2015-05-19 19:27:02 Tak, jest to rozwiązanie problemu. Chcę jednak zrozumieć stable_sort, dlatego o niego pytam. Może ktoś sprawdzić wypociny z pierwszego postu, czy też otrzymuje takie wyniki? |
|
« 1 » |