C++ vector 自定义排序规则(vector<vector<int>>、vector<pair<int,int>>)
温馨提示:这篇文章已超过400天没有更新,请注意相关的内容是否还可用!
vector
vector vec{1,2,3,4};
//默认从小到大排序 1234
sort(vec.begin(),vec.end());
//从大到小排序 4321
sort(vec.begin(),vec.end(),greater());
二维向量vector>
vector 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& v1, const vector& v2){ //如果第一元素相等,则比较第二元素 if (v1[0] == v2[0]) return v1[1] v2[0]; } vector 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 vec{{0,2},{1,5},{1,9},{4,6},{5,9},{8,10}}; sort(vec.begin(),vec.end(),[&](const vector &v1, const vector &v2){ //如果第一元素相等,则比较第二元素 if (v1[0] == v2[0]) return v1[1] 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[0]; });vector<pair<int, int>>
初始化
vector vec; 1. vec.emplace_back(1,2); 2. 能够直接用map转化 //unordered_map map; vector vec(map.begin(),map.end());
cmp排序
vector 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 &a, const pair &b) { if(b.first == a.first) return a.second 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 &a, const pair &b) { if(b.first == a.first) return a.second b.first; }); //[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]这里也可以使用auto关键词,与上面用法一样
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
