引子
我们都知道c++ map的底层使用的红黑树管理节点,因此map中的数据存放实际上已经市排好序的,但是是通过比较key的值进行排序的,很多时候我们需要对map的value进行排序这种时候我们该怎么解决呢?
解决方案
下面我们给出一种解决方案:
将map中的数据拷贝存放在vector中,然后使用stl的sort()函数对vector进行排序。
相见如下代码
#include<map>
#include<vector>
#include<string>
#include<iostream>
#include <algorithm>
using namespace std;
typedef pair<string, int> PAIR;
bool compair_by_value(const PAIR& lhs, const PAIR& rhs)
{
return lhs.second < rhs.second;
};
int main()
{
map<string, int> name_score_map;
name_score_map["Zhangsan"] = 90;
name_score_map["Lisi"] = 79;
name_score_map.insert(make_pair("Wangwu", 99));
vector<PAIR> name_score_vec(name_score_map.begin(), name_score_map.end());
sort(name_score_vec.begin(), name_score_vec.end(), compair_by_value);
for(int i = 0; i != name_score_vec.size(); ++i)
{
cout << name_score_vec[i] << endl;
}
return 0;
}
运行结果