Udostępnij za pośrednictwem


partial_sort_copy

Kopiuje elementy z zakresu źródłowego do docelowego zakresu gdzie elementów źródłowych są uporządkowane według albo mniej niż lub inny określony predykatu dwuelementowego połączone.

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

Parametry

  • _First1
    Iterator danych wejściowych, odnoszący się do pozycji pierwszego elementu w zakresie źródłowym.

  • _Last1
    Wejściowy sterująca adresowania położenie jeden obok ostatniego elementu w zakresie źródłowym.

  • _First2
    Adresowanie położenie pierwszego elementu w zakresie docelowym posortowane sterująca dostępie losowym.

  • _Last2
    Adresowanie położenie jeden obok ostatniego elementu w zakresie docelowym posortowane sterująca dostępie losowym.

  • _Comp
    Zdefiniowana przez użytkownika funkcja predykatu obiektu, który definiuje warunek za spełniony, jeśli dwa elementy mają być pobierane za równoważny.Predykatu dwuelementowego przyjmuje dwa argumenty i zwraca true po stwierdzeniu i false Jeśli nie spełniony.

Wartość zwracana

Sterująca dostępie losowym, adresowania element w docelowym zakres jednej pozycji za ostatni element wstawianych z zakresu Yródłowego.

Uwagi

Zakresów źródłowych i docelowych nie może nakładać się i musi być ważne; wszystkie wskaźniki muszą być dereferenceable i w ramach każdej sekwencji ostatniej pozycji musi być osiągalny od pierwszego przez incrementation.

Predykat dwuelementowy musi dostarczyć ścisłe słaby zamawiania, aby sortowane są elementy, które nie są równoważne, ale nie są elementy, które są równoważne.Dwa elementy są równoważne w obszarze mniej, ale niekoniecznie równe, jeśli nie jest mniejsza niż inne.

Przykład

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

Przykładowe dane wyjściowe

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.

Wymagania

Nagłówek: <algorytm>

Przestrzeń nazw: std

Zobacz też

Informacje

partial_sort_copy (STL — Przykłady)

partial_sort_copy — wersja predykatu

Standardowa biblioteka szablonów