如何按第一个值和第二个值对 pair<int, char> 的向量进行排序? [复制]

Posted

技术标签:

【中文标题】如何按第一个值和第二个值对 pair<int, char> 的向量进行排序? [复制]【英文标题】:How to sort vector of pair<int, char> by both first and second value? [duplicate] 【发布时间】:2019-09-26 00:59:48 【问题描述】:

这是我排序后的输出vector of pair&lt;int, char&gt;

6 X
6 E
6 C
5 D
4 D
4 B
2 A

但我希望它按整数降序排序,在整数相同的情况下按字母升序排序。像这样:

6 C
6 E
6 X
5 D
4 D
4 B
2 A

这是我的代码:

#include <bits/stdc++.h>
using namespace std;

int main() 
    vector<pair<int, char>> v;
    v.push_back(make_pair(5, 'D'));
    v.push_back(make_pair(2, 'A'));
    v.push_back(make_pair(6, 'C'));
    v.push_back(make_pair(4, 'B'));
    v.push_back(make_pair(4, 'D'));
    v.push_back(make_pair(6, 'X'));
    v.push_back(make_pair(6, 'E'));

    sort(v.rbegin(), v.rend());

    for (auto x: v)
        cout << x.first << " " << x.second << endl;

    return 0;

【问题讨论】:

【参考方案1】:

你可以手动写:

sort(v.begin(), v.end(),
  [](auto a, auto b) 
    return a.first > b.first || (a.first == b.first && a.second < b.second);
  
);

【讨论】:

以上是关于如何按第一个值和第二个值对 pair<int, char> 的向量进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 itertools 按第二个值对连续元组进行分组

C ++ - 同时对一对向量的第一个和第二个进行排序

按第二个值对元组列表进行排序,reverse=True,然后按 key,reverse=False

C ++ STL列表运算符重载对(根据第一个值排序,使用第二个值访问)

将地图的第一个和第二个值上传到向量对的第一个和第二个值中

清北学堂(2019 5 3) part 6