2011-11-26 53 views
0

我有两个地图:如何根据C++中的其他地图对地图进行排序?

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

根据MAP1的价值我怎么能排序MAP2? (或将结果保存为向量?) 有没有简单的方法来实现这个?

+1

也许你可以举一个你想在这种情况下排序的小例子吗?这是一个非常广泛的术语。 – Gian

回答

3

您无法对std::map进行排序。地图是总是保存在按键的排序顺序。这是数据结构的一个基本不变量,并且没有什么可以改变这一点。你能做的最好的是地图复制到不同的容器中,并重新安排之一,例如:

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

谢谢,有人告诉我定义一个结构来将Value1和Value2与键相结合,然后使用一个向量对结构进行排序。 – Keosu

0

正如Kerrek说,你可以简单地从beginend迭代地图的构建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)); 
相关问题