关于C++中定义比较函数的三种方法小结

2020-01-06 16:01:58王振洲

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++教程频道。