1. 声明变量时指定排序规则

通过指定模板的第三个参数,对象类型,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 排序
  1. key_comp

返回 map 比较两个键的 函数对象,该对象是该容器构造函数参数 comp 的副本。

  1. value_comp

返回一个 函数对象,该函数对象通过使用 key_comp 比较函数对象对类型 std :: map :: value_type(key-value pairs) 的对象进行比较。

  1. 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;
}

参考:

  1. key_comp
  2. value_comp