【摘录】STL函数对象
摘录自《标准C++》
函数对象其实就是一种类似于函数的类的对象。
函数对象必须重载operator()函数
#include <iostream>
#include <queue>
#include <ctime>
using namespace std;
template <typename T>
class MyComparator //函数对象类
{
public:
bool operator()(T a,T b)
{ //谁离60越近,谁的优先级就越高
return abs(a-60)>abs(b-60);
}
};
int main()
{
//指定 priority_queue 的比较函数对象类为 MyComparator
priority_queue<int,deque<int>,MyComparator<int> > pq;
srand((unsigned)time(0));
for(int i=0;i<10;i++)
{ //产生10个0-99间的随机数 ,并压入队列
int rd=rand()%100;
pq.push(rd);
cout <<rd <<" ";
}
cout <<endl;
//按函数对象输出并弹出元素
for(int i=0;i<10;i++)
{
cout <<pq.top() <<" ";
pq.pop();
}
cout <<endl;
system("pause");
}
在默认情况下,priority_queue的第3个参数为less,这是STL中预定义的函数对象,预定义的函数对象如下所示
plus |
算术 |
返回两个数的和:a+b |
minus |
返回两个数的差:a-b |
|
multiplies |
返回两个数的乘积:a*b |
|
divides |
返回两个数的商:a/b |
|
mudulus |
返回两个数的模:a%b |
|
negate |
返回某个数的相反数:-a |
|
equal_to |
关系 |
判断两个数是否相等:a==b |
not_equal_to |
判断两个数是否不等:a!=b |
|
greater |
判断第一个数是否大于第二个数:a>b |
|
less |
判断第一个数是否小于第二个数:a<b |
|
greate_equal |
判断第一个数是否大于等于第二个数:a>=b |
|
less_equal |
判断第一个数是否小于等于第二个数:a<=b |
|
logical_and |
逻辑 |
返回两个数的逻辑与结果:a&&b |
logical_or |
返回两个数的逻辑或结果:a||b |
|
logical_not |
返回某个数的逻辑非结果:!a |
用法
priority_queue<int,deque<int>,greater<int> > pq;
函数对象类是一个具有operator()成员函数的类,所以可以使用如下写法来测试函数对象的功能
plus<int> x;
cout <<boolalpha <<x(10,20);