Compartir a través de


partial_sort_copy

Copia los elementos de un intervalo de origen en un intervalo de destino donde los elementos de origen se ordenan por menos que u otro predicado binario especificado.

template<class InputIterator, class RandomAccessIterator> 
   RandomAccessIterator partial_sort_copy( 
      InputIterator _First1,  
      InputIterator _Last1, 
      RandomAccessIterator _First2,  
      RandomAccessIterator _Last2 
   ); 
template<class InputIterator, class RandomAccessIterator, class BinaryPredicate> 
   RandomAccessIterator partial_sort_copy( 
      InputIterator _First1,  
      InputIterator _Last1, 
      RandomAccessIterator _First2,  
      RandomAccessIterator _Last2, 
      BinaryPredicate _Comp 
   );

Parámetros

  • _First1
    Iterador de entrada que direcciona la posición del primer elemento del intervalo de origen.

  • _Last1
    Un iterador de entrada que dirige la posición una más allá del último elemento en el intervalo de origen.

  • _First2
    Un iterador de acceso aleatorio que dirige la posición del primer elemento del intervalo de destino ordenados.

  • _Last2
    Un iterador de acceso aleatorio que dirige la posición una más allá del último elemento en el rango de destino ordenados.

  • _Comp
    Objeto definido por el usuario de la función de predicado que define la condición que se completará si fuese dos elementos a ser tomados como equivalentes. Un predicado binario toma dos argumentos y devuelve true cuando se cumple y false cuando no se cumple.

Valor devuelto

Un iterador de acceso aleatorio que las el elemento en el rango de destino una posición más allá del último elemento insertado del intervalo de origen.

Comentarios

El origen y los rangos de destino se superpongan y deben ser válidos; todos los punteros deben ser dereferenceable y dentro de cada secuencia la posición última debe ser accesible de primera por el aumento.

El predicado binario debe proporcionar la ordenación parcial estricta para ordenar los elementos que no son equivalentes, pero los elementos que son equivalentes no. Dos elementos son equivalentes en menor que, igual pero no necesariamente, si hay alguno es menor que otro.

Ejemplo

// alg_partial_sort_copy.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <algorithm>
#include <functional>
#include <iostream>

int main() {
    using namespace std;
    vector<int> v1, v2;
    list<int> list1;
    vector<int>::iterator iter1, iter2;
    list<int>::iterator list1_Iter, list1_inIter;

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

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

    list1.push_back(60);
    list1.push_back(50);
    list1.push_back(20);
    list1.push_back(30);
    list1.push_back(40);
    list1.push_back(10);

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

    cout << "List list1 = ( " ;
    for (list1_Iter = list1.begin();
         list1_Iter!= list1.end();
         list1_Iter++)
        cout << *list1_Iter << " ";
    cout << ")" << endl;

    // Copying a partially sorted copy of list1 into v1
    vector<int>::iterator result1;
    result1 = partial_sort_copy(list1.begin(), list1.end(),
             v1.begin(), v1.begin() + 3);

    cout << "List list1 Vector v1 = ( " ;
    for (iter1 = v1.begin() ; iter1 != v1.end() ; iter1++)
        cout << *iter1 << " ";
    cout << ")" << endl;
    cout << "The first v1 element one position beyond"
         << "\n the last L 1 element inserted was " << *result1
         << "." << endl;

    // Copying a partially sorted copy of list1 into v2
    int ii;
    for (ii = 0; ii <= 9; ii++)
        v2.push_back(ii);

    random_shuffle(v2.begin(), v2.end());
    vector<int>::iterator result2;
    result2 = partial_sort_copy(list1.begin(), list1.end(),
             v2.begin(), v2.begin() + 6);

    cout << "List list1 into Vector v2 = ( " ;
    for (iter2 = v2.begin() ; iter2 != v2.end(); iter2++)
        cout << *iter2 << " ";
    cout << ")" << endl;
    cout << "The first v2 element one position beyond"
         << "\n the last L 1 element inserted was " << *result2
         << "." << endl;
}

Resultados del ejemplo

Vector v1 = ( 8 1 9 2 0 5 7 3 4 6 )
List list1 = ( 60 50 20 30 40 10 )
List list1 Vector v1 = ( 10 20 30 2 0 5 7 3 4 6 )
The first v1 element one position beyond
 the last L 1 element inserted was 2.
List list1 into Vector v2 = ( 10 20 30 40 50 60 1 8 5 2 )
The first v2 element one position beyond
 the last L 1 element inserted was 1.

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Vea también

Referencia

partial_sort_copy (Ejemplos de STL)

Versión de predicado de partial_sort_copy

Biblioteca de plantillas estándar