欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++学习之sort(),partial_sort()和partial_sort_copy()的使用与注意事项

程序员文章站 2022-05-26 22:25:39
...

    博主在做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;
}

运行结果:

C++学习之sort(),partial_sort()和partial_sort_copy()的使用与注意事项

========分割线========

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

(待排序的容器首指针,尾指针,接收元素的容器的首指针,尾指针)

 
  1. #include <iostream>     // std::cout  
  2. #include <algorithm>    // std::partial_sort_copy  
  3. #include <vector>       // std::vector  
  4. using namespace std;  
  5. bool compare(int i, int j)  
  6. {  
  7.     return (i>j);  
  8. }  
  9. int main()  
  10. {  
  11.     int ints[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };  
  12.     vector<int> vec(5);  
  13.     partial_sort_copy(ints, ints + 9, vec.begin(), vec.end());  
  14.     cout << "vec contains:";  
  15.     for (auto it : vec)  
  16.     {  
  17.         cout  << it<<" ";  
  18.     }  
  19.     cout << '\n';  
  20.     system("pause");  
  21.     return 0;  
  22. }  
运行结果:

C++学习之sort(),partial_sort()和partial_sort_copy()的使用与注意事项