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