2017-07-19 106 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的項目。它總是按升序排列。

相關問題