我有两张地图:
map< T t, int v> map1;
map< T t, int v> map2;
我怎么能根据map1的值对map2进行排序? (或者将结果保存到矢量?) 有没有简单的方法来实现这个目标?
答案 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));