stable_partition
Classe les éléments d'une plage dans deux disjointes les packages, avec ces éléments satisfaisant attribut unaire qui précèdent ceux qui ne respecte pas le, en conservant l'ordre relatif des éléments équivalents.
template<class BidirectionalIterator, class Predicate>
BidirectionalIterator stable_partition(
BidirectionalIterator _First,
BidirectionalIterator _Last,
Predicate _Pred
);
Paramètres
_First
Un itérateur bidirectionnel qui adresse la position du premier élément dans la plage à partitioner._Last
Un itérateur bidirectionnel qui adresse la position juste après l'élément final dans la plage à partitionner._Pred
Fonction d'attribut définie par l'utilisateur qui définit la condition à satisfaire si un élément doit être classé. Un attribut prend un seul argument et retourne true ou false.
Valeur de retour
Un itérateur bidirectionnelle qui adresse la position du premier élément dans la plage qui ne remplit pas la condition d'attribut.
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 doit être accessible à partir de la première par incrémentation.
Les éléments a et b sont équivalents, mais pas nécessairement égaux, si les deux Pr (a, *b)*sont faux et Pr (b, a si false, où Pr est le prédicat de paramètres spécifié. L'algorithme de stable_ partition est stable et garantit que l'ordre relatif des équivalents éléments 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 : <algorithme>
Espace de noms : std