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)
或者使用仿函数

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是一个模板类,模板的类型参数表中<>需要传入具体的类,而不是对象。

上一篇:C++提高编程 4 STL -函数对象


下一篇:C++ STL <vector>向量容器