c++ - 如何按值的升序对 std::map 进行排序?
问题描述
我试图弄清楚如何std::map
按价值升序排序。
我的代码:
#include <iostream>
#include <map>
#include <string>
#include <iterator>
void printMapByOrder(std::map<std::string, int> mapOfPlanets)
{
//what should be here?
}
int main() {
std::map<std::string, int> mapOfPlanets;
mapOfPlanets["earth"] = 12;
mapOfPlanets["jupiter"] = 142;
mapOfPlanets["mars"] = 6;
mapOfPlanets["mercury"] = 4;
mapOfPlanets["neptune"] = 49;
mapOfPlanets["pluto"] = 2;
mapOfPlanets["saturn"] = 120;
mapOfPlanets["uranus"] = 51;
mapOfPlanets["venus"] = 12;
printMapByOrder(mapOfPlanets);
}
我想要的结果:
pluto : 2
mercury : 4
mars : 6
earth : 12
venus : 12
neptune : 49
uranus : 51
saturn : 120
jupiter : 142
这有可能做到这一点std::map
吗?
解决方案
不,不可能按地图的值对地图进行排序。
一种可能的解决方案:
void printMapByOrder(std::map<std::string, int> mapOfPlanets)
{
std::vector < std::pair<std::string, int> > planets(mapOfPlanets.begin(), mapOfPlanets.end());
std::sort(planets.begin(), planets.end(), [](auto lhs, auto rhs) {return lhs.second < rhs.second; });
//print planets
}
推荐阅读
- c# - 在 Visual Studio 中保留有意的缩进
- java - 将字节数组解码为字符串并替换字符串内容并将其编码回来?
- mysql - 如何在 wpdb 查询中使用 ON DUPLICATE KEY
- assembly - 如何从 asciz 字符串 ARM 程序集中删除空格(没有外部库)
- excel - 打开带有自定义分隔符的 CSV 文件
- javascript - 自定义反应钩子在redux中返回帮助函数
- javascript - 我可以为多个选择查询编写一个存储过程吗?
- coldfusion - 使用cfscript输出数据库数据
- kubernetes - 为什么rabbitmq在kubenretes集群中使用helm安装时无法创建v_host
- hadoop - 无法使用 Java API 连接 HBASE