C++中map按value排序 之 sort条件排序(多条件)
1、单条件排序
方案:将map的key和value以pair的形式装到vector中,对vector进行排序。
int main() { unordered_map<int, int> iMap; iMap[1] = 20; iMap[2] = 10; iMap[5] = 30; iMap[4] = 0; vector<pair<int, int>> vtMap; for (auto it = iMap.begin(); it != iMap.end(); it++) vtMap.push_back(make_pair(it->first, it->second)); sort(vtMap.begin(), vtMap.end(), [](const pair<int, int> &x, const pair<int, int> &y) -> int { return x.second < y.second; }); for (auto it = vtMap.begin(); it != vtMap.end(); it++) cout << it->first << ':' << it->second << '\n'; return 0; }
这是从小大的排序结果,如果想要从大到小的排序,将sort函数中的第三个参数中Lambda表达式重点额函数体修改为:return y.second < x.second;即可!
2、多条件排序
struct student { int sum; int num; int chinese; }; bool cmp(student s1,student s2)//返回值不是true的,就交换 { if(s1.sum!=s2.sum) return s1.sum>s2.sum; if(s1.chinese!=s2.chinese) return s1.chinese>s2.chinese; if(s1.num!=s2.num) return s1.num<s2.num; } int main() { sort(stu,stu+n,cmp); }