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;
}