排序函数sort()等的用法

sort类函数在这里插入图片描述
sortalgroithm中;
使用语法:sort(begin,end,cmp),cmp是可有可无的参数,如果没有默认非降序排序。
例:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int a[5]={1,3,4,2,5};
    sort(a,a+5);//无参数cmp;
    for(int i=0;i<5;i++)
            cout<<a[i]<<' ';
    return 0;
 }
 //最终结果为1 2 3 4 5

想要改变排序的方式,可使用cmp参数,
第一种:

bool compare(int a,int b)
{
      return a<b;   //升序排列,如果改为return a>b,则为降序

}

第二种:
使用类与对象

class cmp
{
      private:
            Enumcomp comp;
      public:
            cmp(Enumcomp c):comp(c) {};
      bool operator () (int num1,int num2) 
         {
            switch(comp)
              {
                 case ASC:
                        return num1<num2;
                 case DESC:
                        return num1>num2;
              }
          }
};

sort(begin,end,cmp(ASC))实现升序
sort(begin,end,cmp(DESC))实现降序

第三种:
functional提供了一堆基于模板的比较函数对象。
equal_to、not_equal_to、greater、greater_equal、less、less_equal。
升序:sort(begin,end,less<data-type>())
降序:sort(begin,end,greater<data-type>())

引用数据类型string的使用
一个字符串的每个字符的排序
使用迭代器可以完成顺序排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    string str("hello world");
    sort(str.begin(),str.end());
    cout<<str;
    return 0;
 }
 //结果是dehllloorw;

使用反向迭代器可以完成逆序排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    string str("hello world");
    sort(str.rbegin(),str.rend());
    cout<<str;
    return 0;
 }

扩展
begin和end成员

  • c.begin()返回一个迭代器,他的内容指向容器c的第一个元素;
  • c.end()返回一个迭代器,他的内容指向容器c的最后一个元素的下一个位置;
  • c.rbegin()返回一个逆序迭代器,他的内容指向容器c的最后一个元素;
  • c.rend()返回一个逆序迭代器,他的内容指向容器c的第一个元素的前一个位置;

以结构体为例的二级排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct link
{
    int a,b;
};
bool cmp(link x,link y)
{
    if(x.a==y.a)
        return x.b>y.b;
    return x.a>y.a;
}
int main()
{
    link x[4];
    for(int i=0;i<4;i++)
        cin>>x[i].a>>x[i].b;
    sort(x,x+4,cmp);
    for(int i=0;i<4;i++)
        cout<<x[i].a<<' '<<x[i].b<<endl;
    return 0;
 }
stable_sort()//与sort函数的不同之处在于保证不会改变相等元素的顺序;

作为学习笔记,如有错误请告知谢谢;
本文参考摘自:
https://www.cnblogs.com/TX980502/p/8528840.html
https://blog.csdn.net/zzzmmmkkk/article/details/4266888

发布了4 篇原创文章 · 获赞 0 · 访问量 109

猜你喜欢

转载自blog.csdn.net/weixin_44586237/article/details/99630130