当前位置: 首页 > news >正文

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

vector< int >

vector<int> vec{1,2,3,4};//默认从小到大排序  1234
sort(vec.begin(),vec.end());
//从大到小排序 4321
sort(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关键词,与上面用法一样

http://www.lryc.cn/news/192871.html

相关文章:

  • 机器学习 Q-Learning
  • 产品设计心得体会 优漫动游
  • 前端--CSS
  • 实操指南|如何用 OpenTiny Vue 组件库从 Vue 2 升级到 Vue 3
  • 系统架构设计:15 论软件架构的生命周期
  • 金山wps golang面试题总结
  • 计算机视觉实战--直方图均衡化和自适应直方图均衡化
  • 501. 二叉搜索树中的众数
  • 【Linux】常用命令
  • 机器人制作开源方案 | 齿轮传动轴偏心轮摇杆简易四足
  • Windows中将tomcat以服务的形式安装,然后在服务进行启动管理
  • 解决ERROR: No query specified的错误以及\G 和 \g 的区别
  • mysql中SUBSTRING_INDEX函数用法详解
  • AndroidStudio报错:android.support.v4.app.Fragment
  • 今年这情况,还能不能选计算机了?
  • Elastic Cloud v.s. Zilliz Cloud:性能大比拼
  • 设计模式03———包装器模式 c#
  • 《动手学深度学习 Pytorch版》 8.3 语言模型和数据集
  • Linux桌面环境(桌面系统)
  • 【LeetCode刷题(数据结构)】:二叉树的前序遍历
  • 自定义Flink kafka连接器Decoding和Serialization格式
  • 推荐八个大学搜题软件和学习工具哪个好用且免费,一起对比看看
  • SpringBoot面试题1:什么是SpringBoot?为什么要用SpringBoot?
  • Django Test
  • Linux- 自定义一个ARP请求
  • C++下载器程序:如何使用cpprestsdk库下载www.ebay.com图片
  • java springboot通过EnableConfigurationProperties全局声明bean并处理装配
  • 网络工程师知识点2
  • Vue 绑定style和class
  • 【Electron+Vue】Error: error:0308010C:digital envelope routines::unsupported