📜  C++ STL中的map key_comp()函数(1)

📅  最后修改于: 2023-12-03 15:13:56.491000             🧑  作者: Mango

C++ STL中的map::key_comp()函数

在对map进行排序、查找、删除等操作时,是需要根据其键值(key)进行比较的。map类中的比较操作默认是用 less,即按照键值从小到大排列。我们也可以通过修改比较函数对象来改变排序规则。而 map::key_comp() 是一个函数,它返回一个用于比较的函数对象。

语法

map::key_comp() 的语法如下:

key_compare key_comp() const;

其中,

  • key_comp():函数名称,返回一个用于比较键值的函数对象。
  • key_compare:map 实例使用的比较函数对象类型。其定义如下:
typedef Compare key_compare;
参数

map::key_comp() 函数没有参数。

返回值

返回值是一个函数对象,它用于比较 map 存储的键值大小。通过该函数,我们可以自定义比较规则。

实例

假设我们有一个map,存储了每位学生的姓名和对应成绩。我们想要按成绩降序排列,可以如下定义比较函数对象:

struct Greater{
    bool operator()(const string& s1, const string& s2) const{
        return dict[s1] > dict[s2]; // dict为存储学生姓名和成绩的map
    }
};

接着我们可以使用上述自定义的 Greater 函数对象来定义一个 map:

map<string, int, Greater> stus;

但是,在查询和删除指定的学生时,还是需要使用键值(即学生姓名)进行操作。此时就需要用到 map::key_comp() 函数,返回一个用于比较键值大小的函数对象:

map<string, int, Greater>::key_compare mycomp = stus.key_comp();

然后我们可以使用该函数对象进行一些操作,例如查找某位学生成绩:

auto it = stus.find("Jack");
if(mycomp("Jack", stus.rbegin()->first) || !mycomp(stus.begin()->first, "Jack"))
    cout << it->second << endl;

通过 map::key_comp() 函数,我们可以方便地进行自定义比较操作,实现符合需求的排序、查找、删除等操作。