C++ pair组成的vector如何按first降序、second升序排序?
实现方案
前置依赖
- 需引入排序所需的头文件:
#include <algorithm> - 已引入
vector、string、pair对应的头文件
实现方式1:C++11及以上版本(推荐,lambda表达式写法)
直接在std::sort的第三个参数传入自定义比较逻辑即可:
sort(results.begin(), results.end(), [](const pair<int, string>& a, const pair<int, string>& b) { // 先按第一个元素int降序排序 if (a.first != b.first) { return a.first > b.first; } // int相等时按第二个元素string字典序升序排序 return a.second < b.second; });
实现方式2:兼容C++03及更早版本(独立比较函数写法)
先定义全局的比较函数:
bool customCompare(const pair<int, string>& a, const pair<int, string>& b) { if (a.first != b.first) { return a.first > b.first; } return a.second < b.second; }
调用排序时传入该函数:
sort(results.begin(), results.end(), customCompare);
效果验证示例
比如输入的results初始内容为:{3, "banana"}, {1, "apple"}, {3, "cherry"}, {2, "date"}
排序后输出顺序为:{3, "banana"}, {3, "cherry"}, {2, "date"}, {1, "apple"}
内容的提问来源于stack exchange,提问作者sachib620
相关产品推荐
相关产品推荐

