Narzędzia użytkownika

Narzędzia witryny


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 Both sides next revision
sort [2008/12/10 21:16]
czarek
sort [2008/12/10 21:26]
czarek
Linia 3: Linia 3:
 Algorytm sort należący do biblioteki STL umożliwia nam wydajne sortowanie dowolnych zbiorów elementów tego samego typu. Są dwie wersje algorytmu. ​ Algorytm sort należący do biblioteki STL umożliwia nam wydajne sortowanie dowolnych zbiorów elementów tego samego typu. Są dwie wersje algorytmu. ​
  
-===== Pierwsza wersja pobierająca dwa argumenty – sort(first,​last). =====+===== sort(first,​last) ​- pierwsza wersja pobierająca dwa argumenty. =====
  
-''​template <class RandomAccessIterator> ​\\ +<code cpp> 
-  void sort ( RandomAccessIterator first, RandomAccessIterator last );''​+template <class RandomAccessIterator>​  
 +  void sort ( RandomAccessIterator first, RandomAccessIterator last ); 
 +</​code>​
  
 Parametry odpowiednio oznaczają pierwszy i ostatni element pomiędzy którymi mają one zostać posortowane. Element **first** znajduje się z w zbiorze elementów sortowanych,​ a element **last** już nie – **[first, last)**. Do porównywania elementów używany jest operator "<"​ , którego działanie możemy dowolnie ​ przeładować dla obiektów sortowanych. ​ Parametry odpowiednio oznaczają pierwszy i ostatni element pomiędzy którymi mają one zostać posortowane. Element **first** znajduje się z w zbiorze elementów sortowanych,​ a element **last** już nie – **[first, last)**. Do porównywania elementów używany jest operator "<"​ , którego działanie możemy dowolnie ​ przeładować dla obiektów sortowanych. ​
Linia 22: Linia 24:
 sort(b+2, b+7); sort(b+2, b+7);
 // Out: 5   ​29 ​ -40  -17    1   ​65 ​ 100 -100  ​ // Out: 5   ​29 ​ -40  -17    1   ​65 ​ 100 -100  ​
 +</​code>​
 +
 +Przykład sortowania obiektów typu string:
 +<code cpp>
 +vector <​string>​ v1;
 +v1.push_back("​posiedzieć"​);​
 +v1.push_back("​Dobrze"​);​
 +v1.push_back("​Żubrze :)");
 +v1.push_back("​jest"​);​
 +v1.push_back("​przy"​); ​
 +sort(v1.begin(),​ v1.end());
 +/* 
 + * Out: 0:Dobrze
 + ​* ​     1:jest
 + ​* ​     2:​posiedzieć
 + ​* ​     3:przy
 + ​* ​     4:Żubrze :) 
 + */
 +</​code>​
 +
 +===== sort(first, last, comp) - druga wersja algorytmu pobierająca dodatkowo trzeci parametr. =====
 +
 +<code cpp>
 +template <class RandomAccessIterator,​ class Compare> ​
 +  void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
 +</​code>​
 +
 +Ostatni parametr oznacza obiekt lub funkcję, która zostanie wykorzystana do porównywanie elementów podczas sortowania. Argumentami tej funkcji są dwa elementy ze zbioru tego samego typu. Zwraca ona true jeśli pierwszy element ma się znaleźć przed drugim i false w przeciwnym ​ wypadku. Jeśli w sortowanym zbiorze będą elementy równe to nie ma pewności na to że zostaną one w oryginalnej kolejności. Do porównania elementów może zostać również wykorzystany obiekt.
 +
 +Przykład użycia algorytmu sort z trzema parametrami. Do porównania tych obiektów zostanie wykorzystana funkcja porownajMocSamochodow():​
 +<code cpp>
 +bool porownajMocSamochodow(Samochod s1, Samochod s2) { 
 +    if (s1.moc < s2.moc) return true;
 +    else return false; ​
 +}
 +</​code>​
 +<code cpp>
 +vector <​Samochod>​ v2;
 +v2.push_back(Samochod("​Lamborghini Gallardo",​ 512, 723450));
 +v2.push_back(Samochod("​Porsche 911", 190, 346000));
 +v2.push_back(Samochod("​Ferrari 250 S", 210, 1300000));
 +sort(v2.begin(),​ v2.end(), porownajMocSamochodow);​
 +/* 
 + * Out: [Samochód] Nazwa: Porsche 911 , Cena: 346000 , Moc: 190
 + ​* ​     [Samochód] Nazwa: Ferrari 250 S , Cena: 1300000 , Moc: 210
 + ​* ​     [Samochód] Nazwa: Lamborghini Gallardo , Cena: 723450 , Moc: 512
 + */
 +</​code>​
 +
 +Przykład użycia obiektu do porównywania elementów podczas sortowania:
 +<code cpp>
 +struct KlasyfikatorCenowy {
 +  bool operator() (Samochod s1, Samochod s2) { 
 +      if (s1.cena < s2.cena) return true;
 +      else return false;
 +  }
 +} mojKlasyfikatorCenowy;​
 +</​code>​
 +<code cpp>
 +vector <​Samochod>​ v2;
 +v2.push_back(Samochod("​Lamborghini Gallardo",​ 512, 723450));
 +v2.push_back(Samochod("​Porsche 911", 190, 346000));
 +v2.push_back(Samochod("​Ferrari 250 S", 210, 1300000));
 +sort(v2.begin(),​ v2.end(), mojKlasyfikatorCenowy);​
 +/*
 + * Out: [Samochód] Nazwa: Porsche 911 , Cena: 346000 , Moc: 190
 + ​* ​     [Samochód] Nazwa: Lamborghini Gallardo , Cena: 723450 , Moc: 512
 + ​* ​     [Samochód] Nazwa: Ferrari 250 S , Cena: 1300000 , Moc: 210
 + */
 </​code>​ </​code>​
sort.txt · ostatnio zmienione: 2008/12/10 22:08 przez czarek