【发布时间】:2011-11-26 15:27:14
【问题描述】:
我有两张地图:
map< T t, int v> map1;
map< T t, int v> map2;
如何根据 map1 的值对 map2 进行排序? (或者将结果保存到向量中?) 有没有简单的方法来实现这一点?
【问题讨论】:
-
也许您可以举一个小例子说明在这种情况下您希望排序具有什么行为?这是一个非常广泛的术语。
我有两张地图:
map< T t, int v> map1;
map< T t, int v> map2;
如何根据 map1 的值对 map2 进行排序? (或者将结果保存到向量中?) 有没有简单的方法来实现这一点?
【问题讨论】:
您无法对std::map 进行排序。地图始终按键的排序顺序保存。这是数据结构的基本不变量,您无法改变它。你能做的最好的是将地图复制到另一个容器中并重新排列那个容器,例如:
std::vector<std::pair<T, int>> v(map1.begin(), map1.end());
【讨论】:
正如Kerrek 所说,您可以简单地从映射的begin 和end 迭代器构造一个std::vector< std::pair< T, int> >,但这也会为您提供键和值。您可以使用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));
【讨论】: