c++中sort函数学习
sort
使用sort()函数需要使用#include<algorithm>头文件。
sort 基本用法
sort()函数可以对给定区间所有元素进行排序,sort是不稳定的排序。它有三个参数void sort( RandomIt first, RandomIt last, Compare comp ),其中[first, last)表示要排序的元素范围,cmp参数为排序准则,comp参数可以不写,如果不写的话,默认从小到大进行排序。// 非降序更准确
示例1(数组实现)
#include<iostream> #include<algorithm> using namespace std; int main() { int num[10] = {-1,5,79,1,2,8,72,3,4,0}; // 这里使用指针作为迭代器 sort(num, num + 10); for(int i = 0;i < 10;i++) { cout << num[i] << " "; }//输出结果:-1 0 1 2 3 4 5 8 72 79 return 0; }示例2(vector实现)
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int n; cin >> n; vector<int> iv; //空 for(int i = 0;i < n;i++) { int x; cin >> x; iv.emplace_back(x); } sort(iv.begin(),iv.end()); for(int i = 0;i < n;i++) { cout << iv[i] << ' '; } return 0; } /* 输入 5 5 23 9 0 7 输出 0 5 7 9 23 */sort 自定义排序
// 重点是函数部分
cmp比较函数对象(即满足比较概念的对象),在第一参数小于(即先序于)第二参数时返回 true。可以自定义比较函数cmp,根据自定义的逻辑对元素进行排序,也可以自定义第一参数与第二参数的关系,返回值为 true 实现排序。//这里概念抽象应该举例
cmp函数的定义需要两个参数,参数a和参数b(a,b为排序对象的最小单位),当满足一定的条件的时候返回ture或false,当返回值为true时,第一个参数放在前面,第二个参数放在后面; false则反之。
示例一
#include<iostream> #include<algorithm> using namespace std; bool cmp(int a,int b) // 明白第一参数和第二参数的先后关系 { return a > b; // 自定义从大到小 ,重点在返回值 } int main() { int num[10] = {-1,5,79,1,2,8,72,3,4,0}; sort(num, num + 10, cmp); for(int i = 0;i < 10;i++) { cout << num[i] << " "; }//输出结果:79 72 8 5 4 3 2 1 0 -1 return 0; }示例二
//结构体排序 #include<iostream> #include<algorithm> using namespace std; struct node { string id; int age; } a[1000]; bool cmp(node a,node b) { return a.age < b.age; // 自定义年龄从小到大 } int main() { int n; cin >> n; for(int i = 0;i < n;i++) { cin >> a[i].id >> a[i].age; } sort(a , a + n , cmp); for(int i = 0;i < n;i++) { cout << a[i].id << ' ' << a[i].age << endl; } return 0; } /* 输入 3 abc 56 fgh 17 yui 36 输出 fgh 17 yui 36 abc 56 */