跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 国内电商 > C++ vector 自定义排序规则(vector<vector<int>>、vector<pair<int,int>>)

C++ vector 自定义排序规则(vector<vector<int>>、vector<pair<int,int>>)

时间:2024-04-15 19:10:26 来源:网络cs 作者:付梓 栏目:国内电商 阅读:

标签: 规则  定义 
阅读本书更多章节>>>>

vector< int >

vector<int> vec{1,2,3,4};//默认从小到大排序  1234sort(vec.begin(),vec.end());//从大到小排序 4321sort(vec.begin(),vec.end(),greater<int>());

二维向量vector<vector< int >>

vector<vector<int>> vec{{0,2},{1,5},{1,9},{4,6},{5,9},{8,10}};//默认优先对第一元素进行从小到大排序,第一元素相同的,按照第二元素从小到大排序sort(vec.begin(),vec.end()); //[0,2],[1,5],[1,9],[4,6],[5,9],[8,10]

定义cmp函数

1.外部定义

平时的编译器里面自己写的时候 cmp函数前面加不加static都行,但是leetcode刷题时,代码还有实现都是写在类里面的,cmp函数前面一定要加上static修饰。因此建议所有的返回类型都为static bool 类型。这里不能使用C++11中的auto关键词进行自动类型推导C++ sort函数自定义cmp函数中参数带&符号
static bool cmp(const vector<int>& v1, const vector<int>& v2){    //如果第一元素相等,则比较第二元素    if (v1[0] == v2[0])        return v1[1] < v2[1];    return v1[0] > v2[0];}vector<vector<int>> vec{{0,2},{1,5},{1,9},{4,6},{5,9},{8,10}};sort(vec.begin(),vec.end(),cmp);//[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]

2.匿名函数Lambda

vector<vector<int>> vec{{0,2},{1,5},{1,9},{4,6},{5,9},{8,10}};sort(vec.begin(),vec.end(),[&](const vector<int> &v1, const vector<int> &v2){    //如果第一元素相等,则比较第二元素    if (v1[0] == v2[0])        return v1[1] < v2[1];    return v1[0] > v2[0];});//[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]

可以使用auto

sort(vec.begin(),vec.end(),[&](const auto &v1, const auto &v2){    //如果第一元素相等,则比较第二元素    if (v1[0] == v2[0])        return v1[1] < v2[1];    return v1[0] > v2[0];});

vector<pair<int, int>>

初始化

vector<pair<int,int>> vec;1. vec.emplace_back(1,2);2. 能够直接用map转化//unordered_map<int,int> map;vector<pair<int,int>> vec(map.begin(),map.end());

cmp排序

vector<pair<int,int>> vec;vec.emplace_back(0,2);vec.emplace_back(1,5);vec.emplace_back(1,9);vec.emplace_back(4,6);vec.emplace_back(5,9);vec.emplace_back(8,10);//默认按第一元素进行从小到大排序sort(vec.begin(),vec.end());//[0,2],[1,5],[1,9],[4,6],[5,9],[8,10]

1.外部定义

static bool cmp(const pair<int, int> &a, const pair<int, int> &b) {    if(b.first == a.first)        return a.second < b.second;    return a.first > b.first;}sort(vec.begin(),vec.end(),cmp);//[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]

2.匿名函数Lambda

sort(vec.begin(),vec.end(),[&](const pair<int, int> &a, const pair<int, int> &b) {    if(b.first == a.first)        return a.second < b.second;    return a.first > b.first;});//[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]

这里也可以使用auto关键词,与上面用法一样

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/guonei/2024-04-15/159157.html,文章来源:网络cs,作者:付梓,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论