要实现map按 value 升序排序,可以借助 C++ 中的 STL 库中的 sort() 函数来实现。
具体步骤如下:
-
将map的键值对推入到一个vector中。
-
通过 sort() 函数对vector中的元素按照关键字升序排序。
-
将排序后的向量元素重新填充到map中。
以下是详细的代码实现:
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
// 比较函数,将map键值按照value升序排列
bool compare(const pair<int, int>& a, const pair<int, int>& b){
return a.second < b.second;
}
int main()
{
// 定义一个map对象
map<int, int> myMap = {
{1, 6},
{2, 5},
{3, 8},
{4, 1},
{5, 3}
};
// 将map中的元素推入到vector中
vector<pair<int, int>> vec;
for(auto itr = myMap.begin(); itr != myMap.end(); ++itr){
vec.push_back(make_pair(itr->first, itr->second));
}
// 对vector中的元素按值进行升序排序
sort(vec.begin(), vec.end(), compare);
// 清空map
myMap.clear();
// 将已经排好序的vector元素插入到map
for(auto itr = vec.begin(); itr != vec.end(); ++itr){
myMap.insert(make_pair(itr->first, itr->second));
}
// 遍历map中排序后的元素
for(auto itr = myMap.begin(); itr != myMap.end(); ++itr){
cout << "key: " << itr->first << ", value: " << itr->second << endl;
}
return 0;
}
输出结果:
key: 4, value: 1
key: 5, value: 3
key: 2, value: 5
key: 1, value: 6
key: 3, value: 8
另外一种实现方式是利用 lambda 函数作为 compare 函数。实现代码如下:
auto compare = [](const pair<int, int>& a, const pair<int, int>& b){
return a.second < b.second;};
sort(vec.begin(), vec.end(), compare);
这种方式需要 C++ 11 及以上的版本才能有效运行。
注:以上代码示例可以在devcpp 5.11下直接编译运行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:map实现按value升序排序 - Python技术站