我有两个地图:如何根据C++中的其他地图对地图进行排序?
map< T t, int v> map1;
map< T t, int v> map2;
根据MAP1的价值我怎么能排序MAP2? (或将结果保存为向量?) 有没有简单的方法来实现这个?
我有两个地图:如何根据C++中的其他地图对地图进行排序?
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());
谢谢,有人告诉我定义一个结构来将Value1和Value2与键相结合,然后使用一个向量对结构进行排序。 – Keosu
正如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));
也许你可以举一个你想在这种情况下排序的小例子吗?这是一个非常广泛的术语。 – Gian