sort函数
以前一直用,但是当用到降序的时候,对于他的cmp函数还是不熟练,今天特意总结了一下。
sort(a,a+n,cmp);
1.sort函数式c++里面STL库函数,要调头文件#include<algorithm>(注意:C++里面的头文件不带.H,不然提示的错误会让你崩溃,范过两次错误,C小白同学在调用STL时要注意)
2.sort和c里面的qsort 默认的都是升序排序,当我们需要安排降序 或者 在 结构体里面按照某一个变量排序时就要手写 cmp 函数
3.cmp函数返回的是bool型或者真假值1/0就行,例如:
int cmp( const int &a, const int &b ){ if( a > b ) return 1; else return 0; }
****很多人对const不太熟悉,其实他是c++里面的常数,大概作用如下:
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:
const classA operator*(const classA& a1, const classA& a2);
operator*的返回结果必须是一个 const 对象。如果不是,这样的变态代码也不会编译出错;
*****
这里的理解:你可以返回真假,也可以返回a>b或者a<b之类,返回写bool或者int都行,当然写返回 1/0时要用int,但是int时也可以a>b,如下:
#include<stdio.h> #include<algorithm> using namespace std; bool cmp(const int &a,const int &b) { return a>b; } void main() { int a[5]={3,2,1,4}; sort(a,a+4,cmp); for(int i=0;i<4;++i) printf("%d ",a[i]); }
诀窍:这个升还是降,关键就是谁大于谁,我们需要降序,则要想前面大于后面,故要写成a>b,想返回真假,则当a>b时返回真
4.结构体时,将你想要比较的变量参加比较久行啦
#include<stdio.h> #include<algorithm> using namespace std; struct data { int x; int y; }a[3]; bool cmp1(const struct data &m,const struct data &n) //cmp的类型为bool型 { return m.x < n.x; //升序 与qsort不同 } bool cmp2(const struct data &m,const struct data &n) { return m.x > n.x; //降序 } bool cmp3( const struct data &m,const struct data &n) { if(m.x < n.x) //先按 x 升序,若 x 相等,按 y 升序排 return 1; else { if(m.x > m.y) return 0; else { if(m.x == m.y) return m.y < m.y; } } } int main() { scanf("%d%d%d%d%d%d",&a[0].x,&a[0].y,&a[1].x,&a[1].y,&a[2].x,&a[2].y); sort(a,a+3,cmp1); sort(a,a+3,cmp2); sort(a,a+3,cmp3); return 0; }
额 ,先总结这么多吧