当前位置:   article > 正文

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

c++ sort pair

一、对数组排序

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

二、对结构体进行排序

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

#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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

三、对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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

四、对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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/807083
推荐阅读
相关标签
  

闽ICP备14008679号