Sdílet prostřednictvím


partial_sort_copy

Zkopíruje prvky ze zdrojové oblasti do cílové oblasti, kde jsou zdroje prvky uspořádány tak, že buď menší než nebo jiného binárního predikátu.

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
    Vstupní iterátor adresování umístění prvního prvku ve zdrojové oblasti.

  • _Last1
    Vstupní iterátor adresování umístění jeden za poslední prvek ve zdrojové oblasti.

  • _First2
    Random access iterační, který adresování umístění první prvek v seřazeném cílové oblasti.

  • _Last2
    Random access iterační, který adresování umístění jeden za poslední prvek v seřazeném cílové oblasti.

  • _Comp
    Objekt predikátu funkce definované uživatelem, který definuje podmínky splněné, jestliže jsou dva prvky mají být přijata jako rovnocenný.Binárního predikátu přijímá dva argumenty a vrátí true li a false Pokud není splněna.

Vrácená hodnota

Random access iterační, adresování prvků v cílové oblasti jednu pozici za poslední prvek vložený ze zdrojové oblasti.

Poznámky

Zdrojové a cílové oblasti se nesmí překrývat a musí být platné; všechny ukazatele musí být dereferenceable a v rámci každé řady musí být poslední pozice první dostupné ve incrementation.

Binárního predikátu musí poskytnout přísné slabým řazení tak, aby pořadí prvků, které nejsou rovnocenné, ale nejsou prvky, které jsou rovnocenné.Jsou ekvivalentní za méně než dva prvky, ale ne nutně shodné, pokud ani je menší než ostatní.

Příklad

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

Výstup ukázky

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.

Požadavky

Záhlaví: <algoritmus>

Obor názvů: std

Viz také

Referenční dokumentace

partial_sort_copy (ukázky STL)

Partial_sort_copy – verze s predikátem

Standardní knihovna šablon