C++ STL自定义比较函数

比较函数

参考

使用STL中sort和priority_queue自定义比较函数

static bool cmp(int&a, int& b)
{
	return a<b;
}
sort(vec.begin(),vec.end(),cmp);
// 使用lambda函数
sort(vec.begin(),vec.end(),[](int a,int b){return a<b;});
// 使用less<>()
sort(vec.begin(),vec.end(),less<int>());

priority_queue 写法为
priority_queue<int,vector<int>,decltype(&cmp)> q(cmp)

auto cmp = [&nums1,&nums2](const vector<int>&a, const vector<int>&b){
            return nums1[a[0]]+nums2[a[1]] > nums1[b[0]]+nums2[b[1]];
};
priority_queue<vector<int>,vector<vector<int>>,decltype(cmp)> pri_q(cmp);

或者使用仿函数

class Cmp{
public:
  bool operator()(int a,int b){
    return a<b;
  }
}
priority_queue<int,vector<int>,Cmp> q;

仿函数是一个对象,可以看作一个函数或者函数指针
仿函数是重载了()运算符的对象,又是能行使函数功能的类

sort是一个模板函数,第三个参数是Compare类的对象

我们需要在sort的参数列表"()"中给出自定义的Compare类的对象实例,而对于模板类priority_queue,我们需要在其类型参数表 "<>"中给出自定义的Compare类。

因为本质上sort是一个函数,函数参数列表中需要传入实例化后的具体对象,而priority_queue是一个模板类,模板的类型参数表中<>需要传入具体的类,而不是对象。

posted @   西西果RuJ  阅读(235)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示