c++中多种类型sort排序的用法
- 一、对数组排序
- 1、默认排序
- 2、自定义排序
- 二、对结构体进行排序
- 三、对pair进行排序
- 1、默认排序
- 2、自定义排序
- 四、对vector进行排序
- 1、默认排序
- 2、去重排序
- 3、自定义排序
一、对数组排序
1、默认排序
默认从小到大进行排序
#include <bits/stdc++.h>
#define maxsize 100
using namespace std;int main()
{int n;cin>>n;int a[maxsize];for(int i=0;i<n;i++) cin>>a[i];//默认从小到大排序sort(a,a+n); for(int i=0;i<n;i++) cout<<a[i];return 0;
}
2、自定义排序
写一个自定义排序的函数,必须为bool型
#include <bits/stdc++.h>
#define maxsize 100
using namespace std;bool cmp(int x,int y)//数组内的数据是什么类型,传入的参数就是什么类型
{//对数组进行从大到小排序return x>y;
}int main()
{int n;cin>>n;int a[maxsize];for(int i=0;i<n;i++) cin>>a[i];//默认从小到大排序sort(a,a+n,cmp); for(int i=0;i<n;i++) cout<<a[i]<<" ";return 0;
}
二、对结构体进行排序
对结构体进行排序一般都需要自定义函数
#include <bits/stdc++.h>
#define maxsize 100
using namespace std;struct Node
{int data;int number[3];
}cnt[maxsize];bool cmp(Node x,Node y)//传入的参数是结构体的类型
{//对结构体中的number的和进行从大到小排序int sum1=x.number[0]+x.number[1]+x.number[2];int sum2=y.number[0]+y.number[1]+y.number[2];return sum1>sum2;
}int main()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>cnt[i].number[0]>>cnt[i].number[1]>>cnt[i].number[2];//自定义排序,传入定义的函数sort(cnt,cnt+n,cmp); return 0;
}
三、对pair进行排序
1、默认排序
默认对first从小到大排序,当first相同时对second进行从小到大排序
#include <bits/stdc++.h>
#define maxsize 100
using namespace std;pair <int,int> num[maxsize];int main()
{int n;cin>>n;for(int i=0;i<n;i++) cin>>num[i].first>>num[i].second;//默认排序sort(num,num+n);for(int i=0;i<n;i++) cout<<num[i].first<<" "<<num[i].second<<endl; return 0;
}
2、自定义排序
#include <bits/stdc++.h>
#define maxsize 100
using namespace std;pair <int,int> num[maxsize];bool cmp(pair<int,int> x,pair<int,int> y)
{//对first进行从大到小排列return x.first>y.first;
}int main()
{int n;cin>>n;for(int i=0;i<n;i++) cin>>num[i].first>>num[i].second;//默认排序sort(num,num+n,cmp);for(int i=0;i<n;i++) cout<<num[i].first<<" "<<num[i].second<<endl; return 0;
}
四、对vector进行排序
vector只能存储一组相同类型的元素
1、默认排序
#include <bits/stdc++.h>
#define maxsize 100
using namespace std;vector <int> vec; int main()
{int n;cin>>n;int num;for(int i=0;i<n;i++){cin>>num;vec.push_back(num);}//默认排序,从小到大sort(vec.begin(),vec.end());for(auto it=vec.begin();it !=vec.end();it++){cout<<*it<<" ";}return 0;
}
2、去重排序
去除数组中重复的元素
#include <bits/stdc++.h>
#define maxsize 100
using namespace std;vector <int> vec; int main()
{int n;cin>>n;int num;for(int i=0;i<n;i++){cin>>num;vec.push_back(num);}//去除重复元素sort(vec.begin(),vec.end());auto last=unique(vec.begin(),vec.end());vec.erase(last,vec.end());for(auto it=vec.begin();it !=vec.end();it++){cout<<*it<<" ";}return 0;
}
3、自定义排序
#include <bits/stdc++.h>
#define maxsize 100
using namespace std;vector <int> vec; bool cmp(int a,int b)
{return a>b;
}int main()
{int n;cin>>n;int num;for(int i=0;i<n;i++){cin>>num;vec.push_back(num);}//自定义排序,从大到小sort(vec.begin(),vec.end(),cmp);for(auto it=vec.begin();it !=vec.end();it++){cout<<*it<<" ";}return 0;
}