📅  最后修改于: 2023-12-03 15:13:55.328000             🧑  作者: Mango
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个最小或最大的元素复制到另一个容器中。在实际开发中,它可以极大地简化排序算法的实现,并使代码更加优雅。