关于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);
}

当使用一个元素进行升序或降序排列时,如果遇到相同的,那就按另一元素的同种顺序进行排列(如果前面是升序那就升序,反之亦然)

集网络各种资料和实验,仅作个人学习笔记使用

posted @ 2022-07-25 23:03  YJCA  阅读(302)  评论(0)    收藏  举报