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;
}
相关推荐
罗西的思考15 分钟前
【OpenClaw】通过 Nanobot 源码学习架构---(5)Context
人工智能·算法·机器学习
Liudef061 小时前
后量子密码学(PQC)深度解析:算法原理、标准进展与软件开发行业的影响
算法·密码学·量子计算
OYpBNTQXi2 小时前
SEAL全同态加密CKKS方案入门详解
算法·机器学习·同态加密
筱璦2 小时前
期货软件开发 - C# 调用 HQChart 指标计算 C++ 动态库
c++·microsoft·c#
yuannl103 小时前
数据结构----队列的实现
数据结构
蚂蚁数据AntData3 小时前
破解AI“机器味“困境:HeartBench评测实践详解
大数据·人工智能·算法·机器学习·语言模型·开源
ZC跨境爬虫3 小时前
Python异步IO详解:原理、应用场景与实战指南(高并发爬虫首选)
爬虫·python·算法·自动化
不想写代码的星星3 小时前
C++ 内存管理:分区、自定义分配器、常见问题与检测工具
c++
Mr_Xuhhh3 小时前
从ArrayList到LinkedList:理解链表,掌握Java集合的另一种选择
java·数据结构·链表
倦王3 小时前
力扣日刷47-补
python·算法·leetcode