Narzędzia użytkownika

Narzędzia witryny


stable_sort

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
stable_sort [2008/12/10 21:03]
vtech
stable_sort [2008/12/10 22:26] (aktualna)
vtech
Linia 7: Linia 7:
 <code cpp> #​include<​algorithm>​ </​code>​ <code cpp> #​include<​algorithm>​ </​code>​
  
-===== Deklaracja ​for_each ​=====+===== Deklaracja ​stable_sort ​=====
 <code cpp> template <class RandomAccessIterator>​ <code cpp> template <class RandomAccessIterator>​
   void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );   void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );
Linia 17: Linia 17:
  
 ===== Parametry ===== ===== Parametry =====
-  * first - pierwszy element kontenera +  * //first// - pierwszy element kontenera 
-  * last - element za ostatnim w kontenerze +  * //last// - element za ostatnim w kontenerze 
-  * comp - operator binarny relacji odpowiadający operatorowi <. Funkcja lub funktor postaci: bool comp(const <typ> &​a,​const <typ> &b) zwracająca ​''​true'' ​jeśli a<b (element a leży przed elementem b w ustalonym porządku logicznym) oraz ''​false'' ​w przeciwnym przypadku.+  * //comp// - operator binarny relacji odpowiadający operatorowi ​//<//. Funkcja lub funktor postaci: ​//bool comp(const <typ> &​a,​const <typ> &b)// zwracająca ​//true// jeśli a<b (element a leży przed elementem b w ustalonym porządku logicznym) oraz //false// w przeciwnym przypadku.
  
 ===== Wartość zwracana ===== ===== Wartość zwracana =====
Linia 25: Linia 25:
   
 ===== Działanie ===== ===== Działanie =====
-Wykonuje sortowanie elementów kontenera w porządku ustalonym przez operator < (domyślnie rosnący) lub operator comp. +Wykonuje sortowanie elementów kontenera w porządku ustalonym przez operator < (domyślnie rosnący) lub operator ​//comp// podany jako argument
  
 ===== Przykład użycia ===== ===== Przykład użycia =====
 <code cpp> <code cpp>
 +przykład użycia algorytmu stable_sort - książka telefoniczna
 #include <​iostream>​ #include <​iostream>​
 #include <​algorithm>​ #include <​algorithm>​
Linia 43: Linia 44:
  //​konstruktor  //​konstruktor
  rekord(string im, string nazw, string t):​imie(im),​nazwisko(nazw),​tel(t) {};  rekord(string im, string nazw, string t):​imie(im),​nazwisko(nazw),​tel(t) {};
 + //operator porównania wykorzystywany przez algorytm stable_sort
 + bool operator <( const rekord& b ) const
 + {
 + switch(comp_mode)//​wybór sortowanego pola
 + {
 + case by_imie:​ if(imie.compare(b.imie)<​0)return true;​ break;​
 + case by_nazwisko:​ if(nazwisko.compare(b.nazwisko)<​0)return true;break;
 + case by_tel:​ if(tel.compare(b.tel)<​0)return true;​ break;​
 + }
 + return false;
 + };
  //operator wpisu do strumienia - dla wygody drukowania rekordu  //operator wpisu do strumienia - dla wygody drukowania rekordu
  friend ostream&​ operator<<​(ostream&​ str,const rekord& source);  friend ostream&​ operator<<​(ostream&​ str,const rekord& source);
- //operator porównania wykorzystywany przez algorytm stable_sort 
- friend bool operator<​(const rekord& a, const rekord& b); 
- //funkcja porównująca w sposób odwrotny, podawana jako argument stable_sort 
- friend bool comparator(const rekord& a, const rekord& b); 
 }; };
 rekord::​tryb rekord::​comp_mode;​ //statyczna zmienna przechowująca sposób sortowania rekord::​tryb rekord::​comp_mode;​ //statyczna zmienna przechowująca sposób sortowania
-//operator porównania wykorzystywany przez funkcję stable_sort +
-bool operator<​(const rekord& a, const rekord& b) +
-+
- switch(rekord::​comp_mode)//​wybór sortowanego pola +
-+
- case rekord::​by_imie:​ if(a.imie.compare(b.imie)<​0)return true;​ break;​ +
- case rekord::​by_nazwisko:​ if(a.nazwisko.compare(b.nazwisko)<​0)return true;​break;​ +
- case rekord::​by_tel:​ if(a.tel.compare(b.tel)<​0)return true;​ break;​ +
-+
- return false; +
-};+
 //funkcja porównująca w sposób odwrotny (zamiast operatora domyślnego) //funkcja porównująca w sposób odwrotny (zamiast operatora domyślnego)
 //podawana jako trzeci argument algorytmu stable_sort //podawana jako trzeci argument algorytmu stable_sort
Linia 133: Linia 131:
   //podamy jawnie funkcję używaną do porównania   //podamy jawnie funkcję używaną do porównania
   //aby uwidocznić działanie tej funkcji odwraca ona sposób działania   //aby uwidocznić działanie tej funkcji odwraca ona sposób działania
-  //operatora porównania (działa jak poerator ​>) co umożliwia sortowanie w porządku malejącym+  //operatora porównania (działa jak operator ​>) co umożliwia sortowanie w porządku malejącym
   //jest to rozwiązanie bardziej przejżyste niż przypisanie operatorowi < działania ​   //jest to rozwiązanie bardziej przejżyste niż przypisanie operatorowi < działania ​
   //​właściwego dla operatora >   //​właściwego dla operatora >
stable_sort.1228939394.txt.gz · ostatnio zmienione: 2008/12/10 21:03 przez vtech