关于自定义比较的问题

仿函数(functor)

Posted by SHIELD-SKY on August 18, 2016

崔学弟言:

第二版的359页那一小节可以解答你今晚的所有困惑……

然而假期没带紫书啊,幸好大半夜学弟临睡觉之前拍了几张紫书的照片,这里做点笔记

STL的优先队列也定义在头文件里,用“priority_queue”来声明。这个pq是一个”越小的整数优先级越低的优先队列“。

自定义类型也可以组成优先队列,但必须为每个元素定义一个优先级。 例如,要想实现一个“个位数越大的整数优先级反而小”的优先队列,可以定义一个结构体cmp,重载“()”运算符,使其“看上去”想一个函数,然后用“priority_queue<int, vector, cmp> pq”的方式定义。下面是这个cmp的定义:

struct cmp {
	bool operator() (const int a, const int b) const {//a的优先级比b小时返回true
	return a % 10 > b % 10;
	}
};

对于一些常见的优先队列,STL提供了更为简单的定义方法,例如,“越小的整数优先级越大的优先队列”可以写成priority_queue<int, vector greater > pq”。

PS:

在C++中,冲在了“()”运算符的类或者结构体叫做仿函数(functor)。