如何按值对无序哈希映射进行排序

How to sort an unordered hash map by value

本文关键字:排序 映射 哈希 何按值 无序      更新时间:2023-10-16

我有一个 std::unordered_map,其中包含数据类型为字符串的键和数据类型为整数的值。如何最好地按值降序排序?在两个键具有相同值的情况下(卡梅隆和威廉(,我如何按字母顺序对它们进行排序?

我该如何从下面的示例开始

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

意见将不胜感激!

假设:我假设您正在谈论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 Sortingn";
for(auto i:arr)
cout<<i.first<<" --> "<<i.second<<endl;
sort(arr.begin(),arr.end(),comparator);
cout<<"nAfter Sortingn";
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