【摘录】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);

posted @ 2009-11-17 17:42  leukotrichia  阅读(1473)  评论(0编辑  收藏  举报