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;
}
相关推荐
phltxy5 小时前
C语言操作符详解
java·c语言·算法
RuoZoe6 小时前
从 2026 年 3 月 1 日开源,到 26.10.9:Jalium UI 半年时间到底走了多远?
c语言·c++
aqiu1111116 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
辰烨chenye6 小时前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
罗西的思考7 小时前
DreamZero 与 DreamDojo:世界模型与策略的分层协同综合分析与对比
人工智能·算法·机器学习
鱼子星_7 小时前
【C++】继承和多态(上)
c++·笔记
玖玥拾7 小时前
LeetCode 219 存在重复元素 II
算法·leetcode·哈希算法·散列表
知无不研8 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
郝学胜-神的一滴8 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生