小言_互联网的博客

C++vector数组排序

263人阅读  评论(0)


最近刷力扣的时候遇到了好多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)结果

三.自定义函数排序

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

学生列表

name height
amy 165
hone 177
mike 175
jerry 169
jone 169
alex 165
amye 165

(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)结果


转载:https://blog.csdn.net/weixin_46308081/article/details/117195502
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场