// lajstr.cpp // Esimerkki sort-algoritmin käytöstä // Vesa Lappalainen 26.12.2001 #include #include #include #include #include using std::string; using std::ostream_iterator; using std::cout; class cVertaaPaikka { // Vertailuluokka joka vertaa jonoja paikassa unsigned int paikka; // paikka olevan kirjaimen mukaan public: cVertaaPaikka(unsigned int ipaikka) { paikka = ipaikka; } // Jos on cVertaaPaikka vertaa(1); niin seuraavaa operaattoria voi kutsua // "funktiomaisesti": if ( vertaa(jono1,jono2) ) ... bool operator() (const string &a, const string &b) const { if ( ( a.length() <= paikka ) || ( b.length() <= paikka ) ) return a.length() < b.length(); return a[paikka] < b[paikka]; } }; bool laskeva(const string &a,const string &b) { return b < a; } void tulosta(const string nimet[],int lkm) { copy(nimet,nimet+lkm,ostream_iterator(cout," ")); cout << "\n"; } int main(void) { const int lkm = 6; string nimet[lkm] = { "Aku","Mikki","Roope","Hannu","Pelle","Sepe" }; // Nouseva: Aku Hannu Mikki Pelle Roope Sepe sort(nimet,nimet+lkm); tulosta(nimet,lkm); // Laskeva: Sepe Roope Pelle Mikki Hannu Aku sort(nimet,nimet+lkm,laskeva); tulosta(nimet,lkm); sort(nimet,nimet+lkm,std::greater()); tulosta(nimet,lkm); // Toisen kirjaimen mukaan: Hannu Sepe Pelle Mikki Aku Roope stable_sort(nimet,nimet+lkm,cVertaaPaikka(1)); tulosta(nimet,lkm); // HUOM! Sepe oli ennen Pelleä, koska stabiili lajittelu return 0; }