有两个阵列,一个用于ids,另一个用于得分,我想将这两个阵列存储到std::map
,并使用std::partial_sort
查找五个最高分数,然后打印它们的ID 所以,有没有可能使用std::partial_sort
在std::map
?我可以使用std :: partial_sort对std :: map进行排序吗?
1
A
回答
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
的项目。它总是按升序排列。
相关问题
- 1. 如何使用std :: sort对std :: array进行排序?
- 2. std :: map按数据排序?
- 3. 我可以在std :: map中使用CComPtr吗?
- 4. std :: shared_ptr - 我可以使用等号(=)进行初始化吗?
- 5. 我怎么可以排序使用的std ::排序
- 6. 我可以扔`std :: bad_cast`吗?
- 7. 我可以使用std :: pair作为std :: multimap中的键吗?
- 8. 使用std :: set排序std :: list
- 9. 使用std :: string作为std :: map的键
- 10. 我可以将参数传递给std :: vector排序函数吗?
- 11. 使用std :: thread使用std :: map的意外行为
- 12. std :: map - 如何更改键排序?
- 13. 在std :: map中使用std :: auto_ptr安全吗?
- 14. std :: map
- 15. 我想在修改std :: map的同时对它进行修改
- 16. 我可以使用std :: stack作为对象池容器吗?
- 17. 我可以对WinRAR进行排队吗?
- 18. std :: map插入或std :: map查找?
- 19. std ::排序获取std :: bad_alloc
- 20. std :: map初始化std :: vector
- 21. 混淆使用std ::少和std ::有更大的std ::排序
- 22. 在std :: ostream上可以使用std :: back_insert_iterator吗?
- 23. 在COM对象上使用std :: map?
- 24. std :: function可以使用函子吗?
- 25. std :: less <>不能使用我的std :: map
- 26. 使用std :: map与指针
- 27. 使用std :: map和Eigen 3
- 28. QPointer可以作为std :: map的关键
- 29. 如何通过不同的std :: vector的值对std :: vector进行排序?
- 30. 如何用std :: greater对C++映射键进行排序?
您可以按迭代器的矢量*到*地图元素。 – StoryTeller
使用'map> m;'您可以简单地存储2个数组的值,如下所示:'m [score] = id;'存储所有'score'和相应的'id's,你可以参考'map'的起始5个值来得到5个最高'score'和他们对应的'id's。 –
sameerkn