2017-07-19 96 views
1

有两个阵列,一个用于ids,另一个用于得分,我想将这两个阵列存储到std::map,并使用std::partial_sort查找五个最高分数,然后打印它们的ID 所以,有没有可能使用std::partial_sortstd::map我可以使用std :: partial_sort对std :: map进行排序吗?

+1

您可以按迭代器的矢量*到*地图元素。 – StoryTeller

+0

使用'map > m;'您可以简单地存储2个数组的值,如下所示:'m [score] = id;'存储所有'score'和相应的'id's,你可以参考'map'的起始5个值来得到5个最高'score'和他们对应的'id's。 – sameerkn

回答

2

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

+0

仅供参考,'std :: vector'构造函数之一需要一对迭代器,所以'mapValToVec'函数不是必需的:'v {map.begin(),map.end()};'就足够了。 –

+0

已修改。感谢您的信息。 –

+0

理解,谢谢 – TwenteMaster

3

号不能重新排列std::map的项目。它总是按升序排列。