- 声明变量时指定排序规则
通过指定模板的第三个参数,对象类型,C++ 2a 支持 lambda 对象
struct MyCom{
bool operator()(const string key1, const string key2)const{
return key1 > key2;
}
};
int main()
{
// lambda 表达式对象
auto cmp = [](const auto& key1, const auto& key2){return key1 < key2;};
map<string, int, decltype(cmp)> myMap1 = {{"RAM", 20}, {"GPU", 15}, {"CPU", 10} };
// 函数对象
map<string, int, MyCom> myMap2 = {{"CPU", 10}, {"GPU", 15}, {"RAM", 20}};
for(const auto& item : myMap1){
cout << item.first << ": " << item.second << endl;
}
return 0;
}
注意:
operator()
重载需要const
修饰符- 只能对
key
排序
key_comp
返回 map 比较两个键的 函数对象,该对象是该容器构造函数参数 comp
的副本。
value_comp
返回一个 函数对象,该函数对象通过使用 key_comp
比较函数对象对类型 std :: map :: value_type(key-value pairs) 的对象进行比较。
- 按 value 排序
int main()
{
map<string, int> myMap = {{"RAM", 10}, {"GPU", 15},{"CPU", 20} };
vector<pair<string, int>> vec(myMap.begin(), myMap.end());
sort(vec.begin(), vec.end(), [](const auto& pair1, const auto& pair2){ return pair1.second < pair2.second;});
for(const auto& item : vec){
cout << item.first << ": " << item.second << endl;
}
return 0;
}
参考: