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类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?