Partager via


tri

Organise les éléments d'une plage spécifiée dans une commande nondescending ou selon un critère de classement spécifié par un attribut binaire.

template<class RandomAccessIterator>
   void sort(
      RandomAccessIterator first, 
      RandomAccessIterator last
   );
template<class RandomAccessIterator, class Predicate>
   void sort(
      RandomAccessIterator first, 
      RandomAccessIterator last, 
      Predicate comp
   );

Paramètres

  • first
    Un itérateur l'accès aléatoire adressage la position du premier élément dans la plage à trier.

  • last
    Un itérateur l'accès aléatoire adressage la position une après l'élément final dans la plage à trier.

  • comp
    Objet de la fonction définie par l'utilisateur de prédicat qui définit les critères de comparaison à répondre par des éléments consécutifs dans une classe. Cet attribut binaire accepte deux arguments et retourne true si les deux arguments sont dans la commande et l'false sinon. Cette fonction de comparateur doit appliquer le caractère strict des paires d'éléments de la séquence. Pour plus d'informations, consultez Algorithmes.

Notes

La plage référencée doit être valide ; tous les pointeurs doivent être deréférençables et dans la séquence la dernière position est accessible la collection contenue par l'augmentation.

Les éléments sont équivalents, mais pas nécessairement égal, si aucune n'est inférieur à l'autre. L'algorithme d'sort n'est pas stable et par conséquent ne garantit pas que l'ordre relatif des équivalents éléments est conservé. L'algorithme stable_sort garde ce classement d'origine.

La moyenne d'une complexité de tri est Yjournal (N ) N, où N = dernier – en premier.

Exemple

// alg_sort.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>      // For greater<int>( )
#include <iostream>

// Return whether first element is greater than the second
bool UDgreater ( int elem1, int elem2 )
{
   return elem1 > elem2;
}

int main( )
{
   using namespace std;
   vector <int> v1;
   vector <int>::iterator Iter1;

   int i;
   for ( i = 0 ; i <= 5 ; i++ )
   {
      v1.push_back( 2 * i );
   }

   int ii;
   for ( ii = 0 ; ii <= 5 ; ii++ )
   {
      v1.push_back( 2 * ii + 1 );
   }

   cout << "Original vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   sort( v1.begin( ), v1.end( ) );
   cout << "Sorted vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   // To sort in descending order. specify binary predicate
   sort( v1.begin( ), v1.end( ), greater<int>( ) );
   cout << "Resorted (greater) vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   // A user-defined (UD) binary predicate can also be used
   sort( v1.begin( ), v1.end( ), UDgreater );
   cout << "Resorted (UDgreater) vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;
}
  

Configuration requise

En-tête : <algorithme>

Espace de noms : std

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)