C++ lower_bound 与 upper_bound 函数

头文件: #include  <algorithm>

 

二分查找的函数有 3 个: 参考:C++ lower_bound 和upper_bound

lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。

upper_bound(起始地址,结束地址,要查找的数值) 返回的是数值 最后一个 出现的位置。

binary_search(起始地址,结束地址,要查找的数值)  返回的是是否存在这么一个数,是一个bool值

 

 

1  函数lower_bound()  参考:有关lower_bound()函数的使用

 

功能:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置.

注意:如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!

 

2 函数upper_bound()

功能:函数upper_bound()返回的在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置

注意:返回查找元素的最后一个可安插位置,也就是“元素值>查找值”的第一个元素的位置。同样,如果val大于数组中全部元素,返回的是last。(注意:数组下标越界)

 

PS

        lower_bound(val):返回容器中第一个值【大于或等于】val的元素的iterator位置。

        upper_bound(val): 返回容器中第一个值【大于】

 

例子:

复制代码
void main()
{
    vector<int> t;
    t.push_back(1);
    t.push_back(2);
    t.push_back(3);
    t.push_back(4);
    t.push_back(6);
    t.push_back(7);
    t.push_back(8);
</span><span style="color: #0000ff;">int</span> low=lower_bound(t.begin(),t.end(),<span style="color: #800080;">5</span>)-<span style="color: #000000;">t.begin();
</span><span style="color: #0000ff;">int</span> upp=upper_bound(t.begin(),t.end(),<span style="color: #800080;">5</span>)-<span style="color: #000000;">t.begin();
cout</span>&lt;&lt;low&lt;&lt;<span style="color: #000000;">endl;
cout</span>&lt;&lt;upp&lt;&lt;<span style="color: #000000;">endl;


system(</span><span style="color: #800000;">"</span><span style="color: #800000;">pause</span><span style="color: #800000;">"</span><span style="color: #000000;">);

}

复制代码

 

屏幕输出:

 

 

参考:

STL之std::set、std::map的lower_bound和upper_bound函数使用说明

https://blog.csdn.net/jadeyansir/article/details/77015626  可以多看几遍

https://blog.csdn.net/tjpuacm/article/details/26389441

https://blog.csdn.net/lanzhihui_10086/article/details/43269511  

发布了22 篇原创文章 · 获赞 0 · 访问量 1278

猜你喜欢

转载自blog.csdn.net/qq_35238352/article/details/104105030