2010-10-21 111 views
5

有没有一种方法来排序std :: map数据而不是密钥?现在我的代码将整个地图复制到一个数组中,只是为了做到这一点。std :: map按数据排序?

+1

猜猜你需要另一张地图,其中键/值颠倒了吗? – 2010-10-21 23:55:05

+0

还没有找到一个好的解决方案。你不能仅仅交换地图(如同许多人所建议的那样),因为两个值可能是相同的,从而创建一个可能具有较少元素的新地图。实际上**不可能**按值排序地图,因为地图是按键排序的(因此为什么它很快)。即使你尝试创建一个新的已排序的地图,通过像向量一样推入值,你仍然会得到一个按键排序的地图!我在代码中实现的方式是为每个键和值创建排序向量,并在我的应用程序中使用这些向量。为了制作矢量,我先 – user2544830 2013-07-03 02:52:59

+0

[STL map - >按值排序?](http://stackoverflow.com/questions/2699060/stl-map-sort-by-value) – 2017-01-01 14:20:13

回答

3

据我记得,std::map会给你迭代器,将通过按键排序的项目。只有通过值来遍历已排序项目并仍然使用地图的方法是将整个集合重写为另一个地图,其中键和值颠倒过来。

+0

我发现使用一个单一的矢量和简单的发现的东西就更好。 – Jookia 2010-10-22 00:33:03

+2

如果你这样做,你将失去键值对信息。 – 2013-06-25 18:23:44

+0

我指向Oli Charlesworth的回答http://stackoverflow.com/a/5056797/158371 – 2013-12-02 21:08:49