map中的记录按照value排序
map默认是按key值从小到大排序的,要改为按value排序。
基本思路就是:想直接用sort排序是做不到的,sort只支持数组、vector等的排序。
所以可以先把map装进pair里,然后再放入vector,自定义sort实现排序。
#include<iostream> #include<algorithm> #include<map> #include<vector> using namespace std; map<int, int> myMap; map<int, int>::iterator map_iter;//map迭代器 vector<pair<int, int>> vec; vector<pair<int, int>>::iterator vec_iter;//vector迭代器 bool cmp(pair<int, int> a, pair<int, int> b) { //'<'按照value从小到大排,'>'是从大到小 return a.second < b.second; } int main() { myMap[0] = 888888; myMap[1] = 11; myMap[2] = 2222; myMap[3] = 333; myMap[4] = 4; for(map_iter=myMap.begin(); map_iter!=myMap.end(); map_iter++) { //将map中记录push到vector中 vec.push_back(pair<int, int> (map_iter->first, map_iter->second)); //输出默认序列(按key默认排序) cout<<map_iter->first<<" "<<map_iter->second<<endl; } puts("-----------------排序后----------------"); sort(vec.begin(), vec.end(), cmp);//按照cmp中要求排序 for(vec_iter=vec.begin(); vec_iter!=vec.end(); vec_iter++) { //输出按value排序后的序列 cout<<vec_iter->first<<" "<<vec_iter->second<<endl; } return 0; }
输出结果:
C++11