优先级队列的一种用法

       一般来说,程序编写中使用到STL容器时,一般第一个模板参数是必选的,而后面的参数往往使用默认参数。当并不能说明后面的参数是没有用的。下面是一个优先级队列的使用实例,通过修改后面的模板参数,达到修改优先级队列行为的目的。
struct MyTaskStruct
{

       ACE_Time_Value tTaskStamp;

       std :: string str ;
       static bool CompareTimeValueLess ( const MyTaskStruct & a , const MyTaskStruct & b )
       {
              return a . tTaskStamp < b . tTaskStamp ;
       }
       static bool CompareTimeValueGreater ( const MyTaskStruct & a , const MyTaskStruct & b )
       {
              return a . tTaskStamp > b . tTaskStamp ;
       }
};
 
template < class _Ty >
struct TimeValueLess : std :: binary_function < _Ty , _Ty , bool > {
       bool operator ()( const _Ty & _X , const _Ty & _Y ) const
       { return _Ty :: CompareTimeValueLess ( _X , _Y ); }
};
 
template < class _Ty >
struct TimeValueGreater : std :: binary_function < _Ty , _Ty , bool > {
       bool operator ()( const _Ty & _X , const _Ty & _Y ) const
       { return _Ty :: CompareTimeValueGreater ( _X , _Y ); }
};
 
       std :: priority_queue < MyTaskStruct , std :: vector < MyTaskStruct >, TimeValueGreater < MyTaskStruct > > MyQueue ;
       MyTaskStruct struct1 ;

       struct1.tTaskStamp = ACE_OS::gettimeofday();

       struct1 . str = "struct1" ;
       ACE_OS::sleep(1);
       MyTaskStruct struct2 ;

       struct2.tTaskStamp = ACE_OS::gettimeofday();

       struct2 . str = "struct2" ;
       ACE_OS::sleep(1);
       MyTaskStruct struct3 ;

       struct3.tTaskStamp = ACE_OS::gettimeofday();

       struct3 . str = "struct3" ;

       printf("Hello World!/n");

       MyQueue . push ( struct2 );
       MyQueue . push ( struct1 );
       MyQueue . push ( struct3 );
       while (! MyQueue . empty ())
       {
              MyTaskStruct structT = MyQueue . top ();
              MyQueue . pop ();
              printf ( "%s/n" , structT . str . c_str ());
       }
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值