最近刷力扣的时候遇到了好多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
查看评论