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;
}
相关推荐
50万马克的面包10 小时前
顺序表和链表_精华知识点_CSDN博客
数据结构·链表
All for pursuit.10 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青10 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq10 小时前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
Jasmine_llq10 小时前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询
50万马克的面包10 小时前
数据结构01-数据结构概念与复杂度-博客稿
数据结构
Logic10110 小时前
C语言/数据结构贪心算法题解:字符串趋同——逐位统计最高频率求最小修改代价
c语言·数据结构·贪心算法·字符串·时间复杂度·频率统计·算法题
the3clipse11 小时前
H.265熵编码核心:CABAC自适应二进制算术编码详解——如何将语法元素高效压缩为比特流
人工智能·算法·视频编码·h.265·hevc·cabac·cavlc
CQU_JIAKE11 小时前
10.4【A】
算法
Godspeed Zhao11 小时前
现代智能雷达技术19——算法(5)
算法