Partager via


partial_sort_copy

Éléments de copies d'une plage source dans une plage de destination où les éléments sources sont classés par un moins qu'un attribut ou binaire spécifié différent.

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 
   );

Paramètres

  • _First1
    Un itérateur adressant la position du premier élément dans la plage source.

  • _Last1
    Un itérateur d'entrée adressage la position une après l'élément final dans la plage source.

  • _First2
    Un itérateur l'accès aléatoire adressage la position du premier élément dans la plage de destination triées.

  • _Last2
    Un itérateur l'accès aléatoire adressage la position une après l'élément final dans la plage de destination triées.

  • _Comp
    Objet de la fonction définie par l'utilisateur de prédicat qui définit la condition à répondre si deux éléments doivent être pris comme équivalent. Un attribut binaire accepte deux arguments et retourne true si satisfaite et false s'il n'est pas contenu.

Valeur de retour

Un itérateur l'accès aléatoire adressage à l'élément dans la plage de destination selon la position au delà de le dernier élément inséré de la plage source.

Notes

Les plages de source et de destination ne doivent pas se chevaucher et doivent être valides ; tous les pointeurs doivent être deréférençables et dans chaque séquence la dernière position doit être accessible la collection contenue par l'augmentation.

L'attribut binaire doit fournir le caractère strict afin que les éléments qui ne sont pas équivalents sont ordonnés, mais les éléments qui sont équivalents ne sont pas. Deux éléments sont équivalents dans inférieure à égal, mais pas nécessairement, si aucune n'est inférieur à l'autre.

Exemple

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

Résultat de l'exemple

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.

Configuration requise

En-tête : <algorithme>

Espace de noms : std

Voir aussi

Référence

partial_sort_copy (Exemples STL)

Version avec prédicat de partial_sort_copy

Bibliothèque STL (Standard Template Library)