如何根据c ++中的另一个地图对地图进行排序?

时间:2011-11-26 15:27:15

标签: c++ sorting map

我有两张地图:

map< T t, int v> map1;
map< T t, int v> map2;

我怎么能根据map1的值对map2进行排序? (或者将结果保存到矢量?) 有没有简单的方法来实现这个目标?

2 个答案:

答案 0 :(得分:3)

您无法对std::map进行排序。地图始终按键的排序顺序保存。这是数据结构的基本不变量,你无法做任何改变。您可以做的最好是将地图复制到另一个容器中并重新排列该容器,例如:

std::vector<std::pair<T, int>> v(map1.begin(), map1.end());

答案 1 :(得分:0)

正如Kerrek所说,你可以简单地从地图的std::vector< std::pair< T, int> >begin迭代器构造一个end,但这也会给你键和值。您可以使用std::transform仅获取值:

std::map<int, int> m = { {1,-1}, {2,-2} };
std::vector<int> v; v.reserve(m.size());
std::transform(m.begin(), m.end(), std::back_inserter(v), 
               [](const std::pair<const int, int>& p)
               { return p.second; });
// or
std::transform(m.begin(), m.end(), std::back_inserter(v), 
               std::bind(&std::pair<const int, int>::second, std::placeholders::_1));