_M_lower_bound与_M_upper_bound的作用

本文介绍了_STL中_M_lower_bound和_M_upper_bound两个函数的实现及作用。_M_lower_bound用于找到可以插入键__k的第一个位置,而_M_upper_bound则找到可以插入键__k的最后一个位置。当队列中不存在__k时,两者返回相同位置。在不同数据结构如线性表和树中,这两个函数的使用有所不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#define    _STLP_TEMPLATE_FOR_CONT_EXT               template <class _KT>

 

  _STLP_TEMPLATE_FOR_CONT_EXT

  _Base_ptr _M_lower_bound(const _KT& __k) const {   

    _Base_ptr __y = __CONST_CAST(_Base_ptr, &this->_M_header._M_data);      /* Last node which is not less than __k. */

    _Base_ptr __x = _M_root();      /* Current node. */

 

    while (__x != 0)

      if (!_M_key_compare(_S_key(__x), __k))

        __y = __x, __x = _S_left(__x);

      else

        __x = _S_right(__x);

 

    return __y;

  }

 

 

  _STLP_TEMPLATE_FOR_CONT_EXT

  _Base_ptr _M_upper_bound(const _KT& __k) const {

    _Base_ptr __y = __CONST_CAST(_Base_ptr, &this->_M_header._M_data); /* Last node which is greater than __k. */

    _Base_ptr __x = _M_root(); /* Current node. */

 

    while (__x != 0)

      if (_M_key_compare(__k, _S_key(__x)))

        __y = __x, __x = _S_left(__x);

      else

        __x = _S_right(__x);

 

    return __y;

  }

 

    _M_lower_bound 函数的功能是找出可以插入键__k的第一个位置,而_M_upper_bound是找出可以插入键__k的最后一个位置,如果原来队列中不存在__k,那么两个函数返回位置是一致的。

 

如果这两个函数应用在线性表上,那么其情形应该如下图所示。

 

在树中,情况会稍微复杂一点,但是不难理解,有图有真相。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值