c++ - 如何按值对无序哈希映射进行排序
问题描述
我有一个带有数据类型字符串键和数据类型整数值的 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
输入将不胜感激!
解决方案
假设:我假设您正在谈论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
推荐阅读
- python - 如何在我的应用程序中以 kv lang 或普通 kivy 向屏幕添加签名/绘画方法?
- discord - Discord Python Rewrite - 静音“找不到角色”
- python - np.loadtxt 错误:ValueError:无法将字符串转换为浮点数:“时间”
- css - React Native - 无法在 React-Native-Elements 列表项中按要求均匀分布
- laravel - Laravel FCM 通知未发送所有提供的数据
- python - Pygame 显示仅在我退出时更新
- zsh - 在 Zsh 中没有输出的 Emacs 被拒绝
- azure-devops - 在 Azure Dev Ops 上使用 weyland 构建问题
- javascript - 如何使用类名绑定到属性(:class =“”)的document.querySelectorAll?
- wso2 - 通过 WSO2 API Manager 公开不安全的 url