首页 > 解决方案 > 如何按值的升序对 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吗?

标签: c++sortingstdmap

解决方案


不,不可能按地图的值对地图进行排序。

一种可能的解决方案:

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
}

推荐阅读