c++中多种类型sort()排序的用法(数组、结构体、pair、vector)

c++中多种类型sort排序的用法

一、对数组排序

1、默认排序

默认从小到大进行排序

cpp 复制代码
#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型

cpp 复制代码
#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;
}

二、对结构体进行排序

对结构体进行排序一般都需要自定义函数

cpp 复制代码
#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进行从小到大排序

cpp 复制代码
#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、自定义排序

cpp 复制代码
#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、默认排序

cpp 复制代码
#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、去重排序

去除数组中重复的元素

cpp 复制代码
#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、自定义排序

cpp 复制代码
#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;
}
相关推荐
十五年专注C++开发1 小时前
CMake基础:条件判断详解
c++·跨平台·cmake·自动化编译
森焱森1 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
QuantumStack3 小时前
【C++ 真题】P1104 生日
开发语言·c++·算法
天若有情6733 小时前
01_软件卓越之道:功能性与需求满足
c++·软件工程·软件
whoarethenext4 小时前
使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
开发语言·c++·opencv·mfcc
写个博客4 小时前
暑假算法日记第一天
算法
绿皮的猪猪侠4 小时前
算法笔记上机训练实战指南刷题
笔记·算法·pta·上机·浙大
hie988945 小时前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
Jay_5155 小时前
C++多态与虚函数详解:从入门到精通
开发语言·c++
杰克尼5 小时前
BM5 合并k个已排序的链表
数据结构·算法·链表