如何按值对 STL 映射进行排序?

新手上路,请多包涵

如何实现 STL 映射按值排序?

例如,我有一张地图 m

 map<int, int> m;
m[1] = 10;
m[2] = 5;
m[4] = 6;
m[6] = 1;

我想按 m 的值对该地图进行排序。所以,如果我打印地图,我想得到如下结果:

 m[6] = 1
m[2] = 5
m[4] = 6
m[1] = 10

如何以这种方式对地图进行排序?有什么方法可以用排序值处理键和值?

原文由 Charlie Epps 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 704
2 个回答

您可以构建第二个映射,将第一个映射的值作为键,将第一个映射的键作为值。

这仅在所有值都不同时才有效。如果您不能假设这一点,那么您需要构建多地图而不是地图。

原文由 swegi 发布,翻译遵循 CC BY-SA 3.0 许可协议

在某些情况下可以做的一件事是使用 vector<pair<int, int>> 而不是使用 maps<int, int> 。这样你就失去了使用 map 的好处,例如更少的查找时间,但是你可以直接使用带有 vector> 的比较器函数

bool compare(pair<int, int> a, pair<int, int> b)
{
    return (a.second < b.second);
}

原文由 Saurabh Mahra 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题