📅  最后修改于: 2023-12-03 15:13:56.491000             🧑  作者: Mango
在对map进行排序、查找、删除等操作时,是需要根据其键值(key)进行比较的。map类中的比较操作默认是用 less
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() 函数,我们可以方便地进行自定义比较操作,实现符合需求的排序、查找、删除等操作。