注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

数据挖掘

学习数据挖掘

 
 
 

日志

 
 

STL  

2012-04-14 12:55:29|  分类: C++基本技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://www.cnblogs.com/mx113/articles/1604801.html

摘录自《标准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);

  评论这张
 
阅读(121)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017