Partager via


stable_partition

Classifie des éléments dans une plage en deux disjoignent des jeux, avec ces éléments satisfaite un attribut unaire précédant ceux qui ne le contenu pas, en conservant la commande relative d'éléments équivalents.

template<class BidirectionalIterator, class Predicate>
   BidirectionalIterator stable_partition(
      BidirectionalIterator _First, 
      BidirectionalIterator _Last,
      Predicate _Pred
   );

Paramètres

  • _First
    Un itérateur bidirectionnel adressant la position du premier élément dans la plage à partitionner.

  • _Last
    Un itérateur bidirectionnel adressant une position au delà de le dernier élément dans la plage à partitionner.

  • _Pred
    Objet défini par l'utilisateur de fonction de prédicat qui définit la condition à satisfaire si un élément doit être classifié.Un attribut prend un argument unique et retourne true ou false.

Valeur de retour

Un itérateur bidirectionnel adressant la position du premier élément de la plage pour ne pas exécuter la condition d'attribut.

Notes

l'intervalle référencé doit être valide ; tous les pointeurs doivent être deréférençables et dans la séquence la dernière position est accessible dès le début par l'augmentation.

Les éléments a et b sont identiques, mais pas nécessairement égales, si les deux Pr (a, b) a la valeur false et Pr (b, a) si la valeur false, où Pr est l'attribut paramètre- spécifié.L'algorithme de stable_ partition stable et garantit que le classement relatif des éléments équivalents est conservé.L'algorithme partition ne conserve pas nécessairement ce classement d'origine.

Exemple

// alg_stable_partition.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

bool greater5 ( int value ) {
   return value >5;
}

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

   int i;
   for ( i = 0 ; i <= 10 ; i++ )
      v1.push_back( i );

   int ii;
   for ( ii = 0 ; ii <= 4 ; ii++ )
      v1.push_back( 5 );

   random_shuffle(v1.begin( ), v1.end( ) );

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

   // Partition the range with predicate greater10
   result = stable_partition (v1.begin( ), v1.end( ), greater5 );
   cout << "The partitioned set of elements in v1 is:\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   cout << "The first element in v1 to fail to satisfy the"
        << "\n predicate greater5 is: " << *result << "." << endl;
}

Résultat de l'exemple

Vector v1 is ( 5 1 9 2 0 5 7 3 4 5 8 5 5 5 10 6 ).
The partitioned set of elements in v1 is:
 ( 9 7 8 10 6 5 1 2 0 5 3 4 5 5 5 5 ).
The first element in v1 to fail to satisfy the
 predicate greater5 is: 5.

Configuration requise

en-tête : <algorithm>

l'espace de noms : DST

Voir aussi

Référence

Modèles Standard