lexicographical_compare详解

41 篇文章 0 订阅
39 篇文章 2 订阅

lexicographical_compare函数功能:按照字典顺序比较前一区间是否小于后一区间.

template<class _InIt1,

         class _InTy,

         size_t _InSize,

         class _Pr> inline

         bool equal(_InIt1 _First1, _InIt1 _Last1,

                   _InTy (&_First2)[_InSize], _Pr _Pred)

         {       // compare [_First1, _Last1) to [First2, ...)

         return (_STD equal(_First1, _Last1,

                   _Array_iterator<_InTy, _InSize>(_First2), _Pred));

         }

 #endif /* _ITERATOR_DEBUG_LEVEL == 0 */

 

                   // TEMPLATE FUNCTION lexicographical_compare

template<class _InIt1,

         class _InIt2> inline

         bool _Lexicographical_compare(_InIt1 _First1, _InIt1 _Last1,

                   _InIt2 _First2, _InIt2 _Last2)

         {       // order [_First1, _Last1) vs. [First2, Last2)

         for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, ++_First2)

                   if (_DEBUG_LT(*_First1, *_First2))//判断是否*_First1<*_First2

                            return (true);

                   else if (*_First2 < *_First1)        //*_First1>*_First2

                            return (false);                               

                   //else  if *_First2 == *_First

         return (_First1 == _Last1 && _First2 != _Last2);

         }

另一重载函数不在赘述.

举例:

int main()

{

         vector<int> vecInt;

         vecInt.push_back( 3 );

         vecInt.push_back( 6 );

         vecInt.push_back( 5 );

 

         list<int> lstInt;

         lstInt.push_back( 3 );

         lstInt.push_back( 12 );

         lstInt.push_back( 10 );

         lstInt.push_back( 6  );

         bool bLess = lexicographical_compare(vecInt.begin(),vecInt.end(),lstInt.begin(),lstInt.end() );

         system( "pause" );

         return 0;

}

需要注意的是,该算法的比较极易出现错误.例如:”111”,”12”.我们认为前者更大,但是实际上是后者更大,原因是长度在此根本不起作用.这类的有string

想要看string更详细的易错问题,请移步至: http://blog.csdn.net/yuanweihuayan/article/details/6641980

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值