【问题标题】:How do I sort a map according to another map in c++?如何根据 C++ 中的另一个地图对地图进行排序?
【发布时间】:2011-11-26 15:27:14
【问题描述】:

我有两张地图:

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

如何根据 map1 的值对 map2 进行排序? (或者将结果保存到向量中?) 有没有简单的方法来实现这一点?

【问题讨论】:

  • 也许您可以举一个小例子说明在这种情况下您希望排序具有什么行为?这是一个非常广泛的术语。

标签: c++ sorting map


【解决方案1】:

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

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

【讨论】:

  • 谢谢,有人告诉我定义一个结构体,将Value1和Value2与key结合起来,然后用向量对结构体进行排序。
【解决方案2】:

正如Kerrek 所说,您可以简单地从映射的beginend 迭代器构造一个std::vector&lt; std::pair&lt; T, int&gt; &gt;,但这也会为您提供键和值。您可以使用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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-13
    • 2013-10-31
    • 2015-11-07
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多