C++学习之sort(),partial_sort()和partial_sort_copy()的使用与注意事项
博主在做LeetCode--628题时用到了sort的一些功能,比如partial_sort和由大到小排序,在此记录一下。
=======================
一,sort()函数,头文件是“algorithm“,函数默认按升序排列。
1.升序排列
sort(iterator.begin(),iterator.end());
sort(iterator.begin(),iterator.end(),less<int>());
2.降序排列
sort(iterator.begin(),iterator.end(),greater<int>());
3.也可以自定义排序函数
sort(iterator.begin(),iterator.end(),compare comp);
bool comp(int a,int b){
return a>b;
}
4.如果想修改set,map容器内的自动排序功能,可以做如下声明。以set为例对结构体进行排序。
struct stu
{
string name;
int id,score;
bool friend operator< (const stu& a,const stu& b)
{
if (a.score!=b.score)
return a.score>b.score;
else if(a.score==b.score)
return a.name<b.name;
}
};
set<stu> st;
set<stu,greater<stu>> st; //-----从大到小排序------
或者单独声明一个排序的结构体(相当于把上面的排序函数单独拿出来写在外面)。
struct stu{
string name;
int id,score;
};
struct cmp
{
bool operator () (const stu& a, const stu& b) const
{
if (a.score!=b.score)
return a.score>b.score;
else if(a.score==b.score)
return a.name<b.name;
}
};
set<stu,cmp> st;
========分割线========二,partial_sort()函数,进行部分排序。
1.partial_sort (Iterator first, Iterator middle, Iterator last);
2.partial_sort (Iterator first, Iterator middle, Iterator last, Compare comp);
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n=10;
vector<int> nums(n);
for(int i=0;i<n;++i)
nums[i]=10-i;
partial_sort(nums.begin(),nums.begin()+5,nums.end());
for(int i=0;i<n;++i)
cout<<nums[i]<<" ";
return 0;
}
运行结果:
========分割线========
三、partial_sort_copy(),对部分元素进行排序,完毕后复制到另一个容器里。
用法:
1.partial_sort_copy (InputIterator first,InputIterator last,
outputIterator result_first,outputIterator result_last);
2.partial_sort_copy (InputIterator first,InputIterator last,
outputIterator result_first,outputIterator result_last, Compare comp);
(待排序的容器首指针,尾指针,接收元素的容器的首指针,尾指针)
- #include <iostream> // std::cout
- #include <algorithm> // std::partial_sort_copy
- #include <vector> // std::vector
- using namespace std;
- bool compare(int i, int j)
- {
- return (i>j);
- }
- int main()
- {
- int ints[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
- vector<int> vec(5);
- partial_sort_copy(ints, ints + 9, vec.begin(), vec.end());
- cout << "vec contains:";
- for (auto it : vec)
- {
- cout << it<<" ";
- }
- cout << '\n';
- system("pause");
- return 0;
- }
上一篇: 第三周
下一篇: 排序算法---直接插入排序(3)