头文件: #include <algorithm>html
二分查找的函数有 3 个: 参考:C++ lower_bound 和upper_bound数组
lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。函数
upper_bound(起始地址,结束地址,要查找的数值) 返回的是数值 最后一个 出现的位置。ui
binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个bool值。url
1 函数lower_bound() 参考:有关lower_bound()函数的使用spa
功能:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。若是全部元素都小于val,则返回last的位置..net
注意:若是全部元素都小于val,则返回last的位置,且last的位置是越界的!!code
2 函数upper_bound()htm
功能:函数upper_bound()返回的在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置blog
注意:返回查找元素的最后一个可安插位置,也就是“元素值>查找值”的第一个元素的位置。一样,若是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); int low=lower_bound(t.begin(),t.end(),5)-t.begin(); int upp=upper_bound(t.begin(),t.end(),5)-t.begin(); cout<<low<<endl; cout<<upp<<endl; system("pause"); }
屏幕输出:
参考:
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