如何按值对无序哈希映射进行排序
How to sort an unordered hash map by value
我有一个 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
相关文章:
- 使用 Key 对 C++ 中的哈希映射进行排序. 无法排序
- 如何按值对无序哈希映射进行排序
- 从映射<字符串、矢量中对唯一值进行排序<string>>
- 映射C++按值排序和插入元素
- 使用按插入方式排序的参数创建哈希映射
- 为什么内置排序无法对向量映射进行排序
- 根据类成员对同一密钥的多映射元素进行排序
- 以std::字符串作为关键字,按字典顺序对一个无序映射进行排序
- 使用原子指令确保映射访问安全,是否可以使用两个不同的原子对指令进行重新排序
- 通过多个键和存储映射对大量向量进行排序
- 对键进行排序后,按值对多映射进行排序
- 字节不符合记忆映射和对文件进行排序
- 排序标准::映射<字符串,双精度>
- STL映射排序
- 将C++内存排序映射到Java
- 对一个无序映射c++进行排序时数据丢失
- 如何使用模板创建排序映射整数索引
- 存储内部排序映射元素的最快方式
- 在Rcpp中用(西班牙语)重音单词排序映射
- 是否有一个平面的未排序映射/集实现