Freigeben über


partial_sort_copy

Kopiert Elemente aus einem Quellbereich in einen Zielbereich, in dem die Quellelemente entweder durch kleiner oder einem anderen angegebenen 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 behandelt.

  • _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 sortierten Zielbereich behandelt.

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

  • _Comp
    Benutzerdefiniertes Prädikatfunktionsobjekt, das die erfüllt werden definiert, Bedingung, wenn zwei Elemente als Entsprechung ausgeführt werden sollen.Ein binäres Prädikat verwendet zwei Argumente und gibt zurück, wenn true 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 dem letzten Element 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 sein und innerhalb jeder Sequenz muss die letzte Position von der ersten durch Zunahme erreichbar sein.

Das binäre Prädikat muss eine strikte schwache Sortierung bereitstellen, damit Elemente, die nicht äquivalent sind, sortiert werden, aber Elemente, die äquivalent sind, sind nicht.Zwei Elemente sind unter kleiner als äquivalent, aber nicht notwendigerweise entsprechen, wenn kein kleiner als das andere ist.

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

Predicate Version of partial_sort_copy

Standardvorlagenbibliothek