Freigeben über


partial_sort_copy

Kopiert Elemente aus einem Quellbereich in einen Zielbereich, in dem die Quellelemente entweder von kleiner oder ein anderes festgelegtes binäres Prädikat sortiert werden.

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

Parameter

  • _First1
    Ein Eingabeiterator, der die Position des ersten Elements im Quellbereich adressiert.

  • _Last1
    Ein Eingabeiterator, der die Position eine hinter dem letzten Element im Quellbereich behandelt.

  • _First2
    Ein Iterator mit wahlfreier Zugriff, der die Position des ersten Elements im Zielbereich sortierten behandelt.

  • _Last2
    Ein Iterator mit wahlfreier Zugriff, der die Position eine hinter dem letzten Element im Zielbereich sortierten behandelt.

  • _Comp
    Benutzerdefiniertes Prädikatfunktionsobjekt, das die erfüllt werden definiert Bedingung, wenn zwei Elemente als Entsprechung ausgeführt werden sollen. Ein binärer Prädikat akzeptiert zwei Argumente und gibt true zurück, wenn erfüllt und false, wenn nicht erfüllt wird.

Rückgabewert

Ein Iterator mit wahlfreier Zugriff, der das Element an der Position des Zielbereichs einer über den letzten Eintrag hinaus eingefügt vom Quellbereich behandelt.

Hinweise

Die Quelle und die Zielbereiche dürfen sich nicht überschneiden und müssen gültig sein; alle Zeiger müssen dereferenzierbar befinden jeder Sequenz muss die letzte Position der ersten von Zunahme erreichbar sein.

Das Prädikat binäre muss eine genaue schwache Sortierung angeben, damit Elemente, die nicht äquivalent sind, geordnet werden, jedoch Elemente, die äquivalent sind, sind nicht. Zwei Elemente sind unter kleiner als äquivalent, aber entsprechen nicht unbedingt, wenn nicht geringer als die andere.

Beispiel

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

Beispielausgabe

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.

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

partial_sort_copy (STL-Beispiele)

Prädikatversion von partial_sort_copy

Standardvorlagenbibliothek