【问题标题】:Can I use std::partial_sort to sort a std::map?我可以使用 std::partial_sort 对 std::map 进行排序吗?
【发布时间】:2017-12-24 04:01:09
【问题描述】:

有两个数组,一个用于ids,一个用于scores,我想将这两个数组存储到一个std::map,并使用std::partial_sort找到最高的五个分数,然后打印它们的ids 那么,有没有可能在std::map 上使用std::partial_sort

【问题讨论】:

  • 您可以将迭代器向量排序到地图元素。
  • 使用map<int, int, std::greater<int> > m; 您可以简单地存储2个数组中的值,如下所示:m[score] = id; 存储所有scores和对应的ids后,您可以查阅起始的5个值的map 以获得最高的 5 个scores 及其对应的ids。

标签: c++ stl stdmap partial-sort


【解决方案1】:

std::map 中,排序仅适用于键。您可以使用矢量来做到这一点:

//For getting Highest first
bool comp(const pair<int, int> &a, const pair<int, int> &b){
    return a.second > b.second; 
}
int main() {
    typedef map<int, int> Map;
    Map m = {{21, 55}, {11, 44}, {33, 11}, {10, 5}, {12, 5}, {7, 8}};
    vector<pair<int, int>> v{m.begin(), m.end()};
    std::partial_sort(v.begin(), v.begin()+NumOfHighestScorers, v.end(), comp);
    //....
}

这里是Demo

【讨论】:

    【解决方案2】:

    没有。

    您无法重新排列 std::map 中的项目。它似乎总是按升序排列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2018-01-09
      • 2011-01-08
      • 1970-01-01
      • 2012-04-29
      相关资源
      最近更新 更多