C++vector数组排序

Posted jtwty

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++vector数组排序相关的知识,希望对你有一定的参考价值。


最近刷力扣的时候遇到了好多vector数组自定义排序问题,这里先来粗略的总结一下。

vector是C++的STL中一个重要的容器嘛,STL不用说也知道它的功能十分强大,所以有一些内置排序函数。下面来细说一下。


一.简单升序排序

(1)准备

vector头文件,用来引入vector数组

algorithm头文件,用来引入sort函数

(2)函数格式

sort(name.begin(),name.end());

name.begin()表示指向数组头的迭代器,name.end()表示指向数组尾下一个位置的迭代器,该式表示将叫name的vector元素按从小到大进行升序排序。

(3)完整代码

#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
    int ans[6]={5,7,3,8,1,2};
    vector<int>num;
    cout<<"before sorted: ";
    for(int i=0;i<6;i++)
    {
        cout<<ans[i]<<" ";
        num.emplace_back(ans[i]);
    }
    cout<<endl;
    cout<<"after sorted: ";
    //按升序排序
    sort(num.begin(),num.end());
    for(int i=0;i<num.size();i++)
    {
        cout<<num[i]<<" ";
    }
    system("pause");
	return 0;
} 

(4)结果

在这里插入图片描述

二.简单降序排序

(1)函数格式

sort(name.rbegin(),name.rend());

name.rbegin()表示指向数组尾的迭代器,name.rend()表示指向数组头前一个位置的迭代器,该式表示将叫name的vector元素按从大到小进行降序排序。

(2)完整代码

#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
    int ans[6]={5,7,3,8,1,2};
    vector<int>num;
    cout<<"before sorted: ";
    for(int i=0;i<6;i++)
    {
        cout<<ans[i]<<" ";
        num.emplace_back(ans[i]);
    }
    cout<<endl;
    cout<<"after sorted: ";
    //按降序排序
    sort(num.rbegin(),num.rend());
    for(int i=0;i<num.size();i++)
    {
        cout<<num[i]<<" ";
    }
    system("pause");
	return 0;
} 

(3)结果

在这里插入图片描述

三.自定义函数排序

我们在很多时候都要按照题意来进行排序,而且一般这个对象不止含有一个属性,所以我们需要来自定义它的排序方式。下面以一群学生为例,我们对他们身高进行降序排序,当身高相同时按名字中的字母顺序排序。

学生列表

nameheight
amy165
hone177
mike175
jerry169
jone169
alex165
amye165

(1)函数格式

sort(res.begin(),res.end(),[&](const typename&a,const typename&b)->bool{
    return (输入你的排序标准);
});

(2)代码

#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<string>
#include<unordered_map>
using namespace std;
int main(){
    //我们将学生信息存入map中
    unordered_map<string,int>map;
    string name;
    int height;
    for(int i=0;i<7;i++)
    {
        cin>>name>>height;
        map[name]=height;
    }

    //将学生名字存入vector数组中
    vector<string>res;
    for(auto &[key,value]:map)
    {
        res.emplace_back(key);
    }

    //自定义排序,按身高降序,身高相同时则按名字升序排列
    sort(res.begin(),res.end(),[&](const string&a,const string&b)->bool{
        return map[a]==map[b]?a<b:map[a]>map[b];
    });

    //输出排列后的顺序
    cout<<endl;
    cout<<"after sorted: "<<endl;
    for(int i=0;i<res.size();i++)
    {
        cout<<res[i]<<"   "<<map[res[i]]<<endl;
    }
    system("pause");
	return 0;
} 

(3)结果

在这里插入图片描述

以上是关于C++vector数组排序的主要内容,如果未能解决你的问题,请参考以下文章

C++中用vector存放一个数组,对数组进行排序,并输出数组

Vector容器 二维数组sort()排序

用vector开的结构体数组,能否用sort排序

基于其他 int 数组的 C++ 排序

c++ vector 为啥叫向量

用lambda表达式按照结构体中的一个字段来排序一个结构体数组