关于sort函数以及sort和pair
关于sort的cmp函数
一、基本
sort函数默认从小到大排序
#include<bits/stdc++.h>
using namespace std;
int a[10]={10,3,6,5,4,1,8,7,9,2}
int main(){
sort(a,a+10);
for(int i=0;i<10;i++) cout<<a[i]<<" ";
}
输出效果:
1 2 3 4 5 6 7 8 10
二、运用cmp函数可以控制排序
#include<bits/stdc++.h>
using namespace std;
int a[10]={10,3,6,5,4,1,8,7,9,2}
bool cmp(int x,int y){//传入前面,后面两个数据
return x>y;//前面比后面大,是从大到小排列的
}
int main(){
sort(a,a+10);
for(int i=0;i<10;i++) cout<<a[i]<<" ";
}
输出效果:
10 9 8 7 6 5 4 3 2 1
三、控制结构体中的元素进行排列
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
}MyNode[10];
bool cmp(node a,node b){
return a.x>b.x;//把前面结构体中的x和后面结构体中的x进行比较
}
int main(){
for(int i=0;i<10;i++) cin>>MyNode[i].x;
sort(MyNode,MyNode+10,cmp);//就等于把前面的元素和后面的元素比,效果和二中的相同
for(int i=0;i<10;i++) cout<<MyNode[i].x<<" ";
}
输入:
10 2 6 4 8 1 3 5 7 9
输出效果:
10 9 8 7 6 5 4 3 2 1
四、pair数据结构和sort
sort在默认情况下以first元素的升序进行排列,如果两元素的first相同,则按照second元素进行升序排列。
#include<bits/stdc++.h>
using namespace std;
pair <int, int> p[10];
int main() {
for(inti=0;i<10;i++)scanf("%d%d",&p[i].first,&p[i].second);
sort(p,p+10);
for(int i=0;i<10;i++) printf("%d ",p[i].first);
printf("\n");
for(int i=0;i<10;i++) printf("%d ",p[i].second);
}
当然也可以用cmp函数自定义sort
#include<bits/stdc++.h>
using namespace std;
pair <int, int> p[10];
bool cmp(pair<int,int> a,pair<int,int> b){
//return a.first>b.first ——对于first元素进行降序排列
//return a.second<b.second; —— 对second元素进行升序排列
//return a.second>b.second —— 对second进行降序排列
}
int main() {
for(int i=0;i<10;i++) scanf("%d%d",&p[i].first,&p[i].second);
sort(p,p+10,cmp);
for(int i=0;i<10;i++) printf("%d ",p[i].first);
printf("\n");
for(int i=0;i<10;i++) printf("%d ",p[i].second);
}
当使用一个元素进行升序或降序排列时,如果遇到相同的,那就按另一元素的同种顺序进行排列(如果前面是升序那就升序,反之亦然)
集网络各种资料和实验,仅作个人学习笔记使用

浙公网安备 33010602011771号