lower_bound( ) 与 upper_bound( )

Posted salty-fish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lower_bound( ) 与 upper_bound( )相关的知识,希望对你有一定的参考价值。

lower_bound( ) 与 upper_bound( )

这两个函数是用二分查找的方式,在一个排好序的数组中进行查找,返回值是地址。

如果数组为从小到大的顺序排列的话:

  • lower_bound :lower_bound( begin,end,num),在begin到end-1之间,二分查找第一个大于或等于num的数字,不存在返回end

  • upper_bound :upper_bound( begin,end,num),在begin到end-1之间,二分查找第一个大于num的数字,不存在返回end

如果数组为从大到小的顺序排列的话,则需要重载:

  • lower_bound ( begin,end,num,greater() ),在begin到end-1之间二分查找第一个小于或等于num的数字,不存在返回end
  • upper_bound ( begin,end,num,greater() ),在begin到end-1之间二分查找第一个小于或等于num的数字,不存在返回end

因为返回值是地址,所以一般再减去begin,获得要寻找的数字的下标

int pos = lower_bound ( arr , arr + length , num ) -arr ;

以上是关于lower_bound( ) 与 upper_bound( )的主要内容,如果未能解决你的问题,请参考以下文章

lower_bound()函数与quicksort()函数的简单掌握

为啥 C++ lower_bound() 允许返回与 val 等效的指针,而 upper_bound() 不允许

lower_bound与upper_bound

lower_bound函数与upper_bound函数

关于lower_bound与upper_bound

刷题记录 && 算法杂谈折半枚举与upper_bound 和 lower_bound