Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Se recomienda usar Visual Studio 2017

stable_partition

 

Publicada: abril de 2016

Clasifica los elementos de un intervalo en dos conjuntos disjuntos, donde los elementos que satisfacen un predicado unario preceden a los que no lo satisfacen, conservando el orden relativo de los elementos equivalentes.


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

_First

Iterador bidireccional que direcciona la posición del primer elemento del intervalo particionar.

_Last

Iterador bidireccional que direcciona la posición uno después del último elemento del intervalo particionar.

_Pred

Objeto de función de predicado definido por el usuario que define la condición que se debe cumplir si es un elemento se clasifican. Un predicado toma un argumento único y devuelve true o false.

Iterador bidireccional que direcciona la posición del primer elemento del intervalo que no cumple la condición de predicado.

El intervalo al que se hace referencia debe ser válido; todos los punteros se deben poder desreferenciar y, dentro de la secuencia, se debe poder llegar a la última posición desde la primera mediante incrementos.

Elementos una y b son equivalentes, pero no necesariamente igual, si ambos Pr (una, b) es false y Pr (b, una) si es false, donde Pr es el predicado especificado por el parámetro. El stable_ partición algoritmo es estable y garantiza que el orden relativo de los elementos equivalentes se conservará. El algoritmo partición no significa necesariamente que conservar este orden original.

Ejemplo

// 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;
}

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.

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Mostrar: