-
头文件
#include
-
.sort()函数参数
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); // first:要排序的数组的起始地址; // last:要排序的数组的结束地址; // comp:排序的方法,默认是从小到大 - 升序;
-
实例
// *** 实例1:自定义cmp实现从大到小排序 *** #include
#include using namespace std; bool cmp(int a,int b); main(){ //sort函数第三个参数自己定义,实现从大到小 int a[]={45,12,34,77,90,11,2,4,5,55}; sort(a,a+10,cmp); for(int i=0;i<10;i++) cout // *** 实例2:自定义cmp实现结构体比较 *** #include
#include using namespace std; // 写法1: struct Student { // 结构体 char name[20]; int math; int english; } stu1; // 直接赋值了stu1; // 写法2:定义结构体student为Student(实际上是把struct student换了一种叫法,新的叫法为Student) //typedef struct student { // char name[20]; // int math; // int english; //}Student; bool cmp(Student a, Student b) { if (a.math > b.math) return a.math < b.math; //按math从小到大排序 else if (a.math == b.math) return a.english > b.english; //若math相等,按endlish从大到小排序 } int main() { //先按math从小到大排序,math相等,按english从大到小排序 Student a[4] = { {"apple",67,89},{"limei",90,56},{"apple",90,99} }; sort(a, a + 3, cmp); for (int i = 0; i < 3; i++) cout << a[i].name << " " << a[i].math << " " << a[i].english << endl; cout << stu1.math << endl; } 补充:
// *** 1.对于容器,容器中的数据类型可多样化 *** // 元素本身包含了比较关系,比如 int,double 等基础类型,可以直接进行比较greater
()递减,less ()递增 sort(arr.begin(),arr.end(),greater ()); // 实现从大到小排序 // *** 2.对于元素本身为class或者struct,类内部需要重载运算符,实现元素的比较 *** // bool operator<(const className & rhs) const; 参数为引用,需要加const,这样临时变量可以赋值;重载operator为常成员函数,可以被常变量调用; typedef struct student { char name[20]; int math; // 按math从大到小排序 // 重载 < 方法1: // bool operator<(const className & rhs) const; 参数为引用,需要加const,这样临时变量可以赋值;重载operator为常成员函数,可以被常变量调用; // inline:内联函数,解决频繁调用的函数大量消耗栈空间内存的问题 inline bool operator < (const student & x) const { return math > x.math; } }Student; // 重载也可以定义为如下格式: struct Cmp { bool operator()(Info a1, Info a2) const { return a1.val > a2.val; } };
参考文献
https://blog.csdn.net/chongchujianghu3/article/details/105152147
https://blog.csdn.net/zhangyikuaile/article/details/114684470
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)