2. 自定义排序方法。
使用这种方式常常用在如下情形:
a.比较内置类型
b.不能修改需要比较的类型
c.除了类型自定义的比较方式以外的比较方法
简单来说,一个比较方法接收两个同类型的对象作为参数并且返回一个bool值,原型如下:
bool name(T a,T b);
3. 重载()操作符
我们可以将比较函数作为STL容器构造函数的第一个参数,并且把函数类型作为模板参数。例如:
set<int,bool (*)(int,int)> s(cmp);
这样做或多或少会让人费解。那我们就来看看如何使用仿函数来消除你的疑惑吧。
我们需要定义一个新的类并重载()操作符。
vector<int> occurrences;
struct cmp
{
bool operator()(int a, int b)
{
return occurrences[a] < occurrences[b];
}
};
现在我们就可以把这个类作为模板参数传递给STL容器了。
set<int, cmp> s;
priority_queue<int, vector<int>, cmp> pq;
STL也有一些内置的仿函数,例如less<T>,greater<T>等。
仿函数可以通过初始化然后像普通函数一样使用。最简单的就是在仿函数后面加上()。
sort(data.begin(), data.end(), greater<int>());
以上就是小编为大家带来的关于C++中定义比较函数的三种方法小结全部内容了,希望大家多多支持ASPKU~
注:相关教程知识阅读请移步到C++教程频道。










