首页 > 解决方案 > 如何按值对无序哈希映射进行排序

问题描述

我有一个带有数据类型字符串键和数据类型整数值的 std::unordered_map。我怎样才能最好地按值降序排序?如果两个键具有相同的值(Cameron 和 William),我该如何按字母顺序对它们进行排序?

我如何从下面的示例中进行

Chloe --- 144
Elijah --- 51
Cameron --- 485
Jayden --- 390
William --- 485
Natalie --- 207

Cameron --- 485 (C comes before W)
William --- 485
Jayden --- 390
Natalie --- 207
Chloe --- 144
Elijah --- 51

输入将不胜感激!

标签: c++

解决方案


假设:我假设您正在谈论unordered_map并将元素从地图中取出并相应地对它们进行排序,因为您无法更改其unordered_map自身内部的顺序。

#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
bool comparator(const pair<string,int> &p1,const pair<string,int> &p2){
    if(p1.second==p2.second){ // If numbers are same, sort by string
        return p1.first<p2.first;
    }
    return p1.second>p2.second; // Descending order
}
int main(){
    unordered_map<string,int> _map;
    _map.insert({"Chloe",144});
    _map.insert({"Elijah",51});
    _map.insert({"Cameron",485});
    _map.insert({"Jayden",390});
    _map.insert({"William",485});
    _map.insert({"Natalie",207});
    vector<pair<string,int>> arr;
    for(auto i:_map)
        arr.push_back(i);
    cout<<"\nBefore Sorting\n";
    for(auto i:arr)
        cout<<i.first<<" --> "<<i.second<<endl;
    sort(arr.begin(),arr.end(),comparator);
    cout<<"\nAfter Sorting\n";
    for(auto i:arr)
        cout<<i.first<<" --> "<<i.second<<endl;
}


输出

Before Sorting
William --> 485
Jayden --> 390
Cameron --> 485
Natalie --> 207
Chloe --> 144
Elijah --> 51

After Sorting
Cameron --> 485
William --> 485
Jayden --> 390
Natalie --> 207
Chloe --> 144
Elijah --> 51

推荐阅读