📜  C++ STL-algorithm.partial_sort_copy()函数(1)

📅  最后修改于: 2023-12-03 15:13:55.328000             🧑  作者: Mango

C++ STL - algorithm.partial_sort_copy()函数

简介

partial_sort_copy()函数是C++标准模板库(STL)中的一个算法函数,用于对容器进行部分排序。该函数可以将容器中前N个最小或最大的元素复制到另一个容器中,而不改变原始容器。

函数原型
template<class InputIt, class RandomIt>
RandomIt partial_sort_copy(InputIt first, InputIt last, RandomIt d_first, RandomIt d_last);
template<class InputIt, class RandomIt, class Compare>
RandomIt partial_sort_copy(InputIt first, InputIt last, RandomIt d_first, RandomIt d_last, Compare comp);
参数
  • first:指向要排序的数据的第一个元素的迭代器。
  • last:指向要排序的数据的尾后迭代器。
  • d_first:指向输出序列的第一个元素的迭代器。
  • d_last:指向输出序列的尾后迭代器。
  • comp(可选参数):排序规则的谓词,一个可调用对象,接受两个参数并返回bool类型的值。如果不提供此参数,则将使用默认的less函数对象。
功能

partial_sort_copy()函数使用“部分排序”算法将输入序列的前n(n不大于目标序列的大小)个元素存储到输出序列中,输出序列应具有足够的空间。

该函数不对输入序列进行排序,仅对输出序列进行排序。如果要对原始序列进行排序,则应使用sort函数。

返回值

函数返回一个迭代器,指向复制到目标序列中的最后一个元素的下一个元素,即输出序列的尾后迭代器。

示例一:对整数容器进行部分排序
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    //定义整数容器
    vector<int> nums = {15, 10, 20, 8, 7, 19, 18, 13, 14, 12};

    //定义另一个整数容器
    vector<int> partial_sorted;

    //使用partial_sort_copy函数将前5个最小的元素复制到新容器中
    partial_sort_copy(nums.begin(), nums.end(), partial_sorted.begin(), partial_sorted.end(), less<int>());

    //输出结果
    cout << "前5个最小的元素为: ";
    for (auto num : partial_sorted)
    {
        cout << num << " ";
    }

    return 0;
}
输出
前5个最小的元素为: 7 8 10 13 14 
示例二:对字符串容器进行部分排序
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main()
{
    //定义字符串容器
    vector<string> words = {"apple", "ball", "car", "dog", "eggbread", "fruits", "grape", "hello", "ice", "juice"};

    //定义另一个字符串容器
    vector<string> partial_sorted;

    //使用partial_sort_copy函数将前4个最小的元素复制到新容器中
    partial_sort_copy(words.begin(), words.end(), partial_sorted.begin(), partial_sorted.end(), [](string a, string b) {return a.length() < b.length(); });

    //输出结果
    cout << "前4个最短的单词为: ";
    for (auto word : partial_sorted)
    {
        cout << word << " ";
    }

    return 0;
}
输出
前4个最短的单词为: car ice ball dog 
小结

partial_sort_copy()函数是C++ STL中的一个常用排序函数,可用于将一个序列的前n个最小或最大的元素复制到另一个容器中。在实际开发中,它可以极大地简化排序算法的实现,并使代码更加优雅。