一
std::map
由其订购
钥匙
这是无法改变的(毕竟,地图的点是
按键快速访问
)但是,您可以创建一个指向映射元素的指针容器,并对其进行排序以进行打印。您将希望通过常量引用传递您的映射,这样您的指针就不会无效:
#include <algorithm>
#include <vector>
void printMapByOrder(const std::map<std::string, int>& mapOfPlanets)
{
using element = typename std::map<std::string, int>::value_type;
std::vector<const element*> sorted;
sorted.reserve(mapOfPlanets.size());
for (auto& planet: mapOfPlanets)
sorted.push_back(&planet);
# sort by value
std::sort(sorted.begin(), sorted.end(),
[](auto *a, auto *b) {
return std::tie(a->second, a->first)
< std::tie(b->second, b->first);
});
# print results
std::transform(sorted.begin(), sorted.end(),
std::ostream_iterator<std::string>(std::cout),
[](const auto *p) {
return p->first + ": "
+ std::to_string(p->second) + '\n';
});
}