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