关于STL中二分查找算法的使用
程序员文章站
2024-03-17 18:59:16
...
lower_bound: 有序集合中,通过二分查找,找到第一个大于等于目标值的位置。
upper_bound: 有序集合中,通过二分查找,找到第一个大于目标值的位置。
binary_search: 有序集合中,通过二分查找,寻找目标值。
STL的有序容器set,自带了lower_bound和upper_bound的接口,可以方便的调用。
以下是对二分查找接口的使用示例:
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int main() {
vector<int> arr{ 1,2,3,5,6,7,8,9 };
for (auto& i : arr) {
cout << i << " ";
}
cout << endl;
// lower_bound: 有序集合里,通过二分查找,快速找到大于等于目标值的位置
auto pos = lower_bound(arr.begin(), arr.end(), 4);
if (pos != arr.end()) {
cout << "lower_bound found 4: " << *pos << endl;
}
// lower_bound: 有序集合里,通过二分查找,快速找到大于等于目标值的位置
auto pos2 = lower_bound(arr.begin(), arr.end(), 5);
if (pos2 != arr.end()) {
cout << "lower_bound found 5: " << *pos2 << endl;
}
// upper_bound: 有序集合里,通过二分查找,快速找到大于目标值的位置
auto pos3 = upper_bound(arr.begin(), arr.end(), 6);
if (pos3 != arr.end()) {
cout << "upper_bound found 6: " << *pos3 << endl;
}
// binary_search: 有序集合中,通过二分查找,寻找目标值
auto pos4 = binary_search(arr.begin(), arr.end(), 7);
if (pos4 == true) {
cout << "binary_search found 7: true" << endl;
}
// 有序集合set, 自带lower_bound, upper_bound接口
set<int> s{ 1,23,4,32,43,5,4,65 };
auto pos5 = s.lower_bound(23);
if (pos5 != s.end()) {
cout << "set lower_bound found 23: " << *pos5 << endl;
}
auto pos6 = s.upper_bound(23);
if (pos6 != s.end()) {
cout << "set lower_bound found 23: " << *pos6 << endl;
}
return 0; ;
}
以下是代码输出:
1 2 3 5 6 7 8 9
lower_bound found 4: 5
lower_bound found 5: 5
upper_bound found 6: 7
binary_search found 7: true
set lower_bound found 23: 23
set lower_bound found 23: 32
谢谢阅读
上一篇: Java 实现真正的优先级队列(相同优先级的元素先进先出)
下一篇: STL中二分查找