c++使用find实现lower_bound
时间: 2023-08-06 10:16:01 浏览: 89
使用STL中的`std::lower_bound`函数可以查找一个已排序的区间中第一个大于等于给定值的元素的位置。下面是使用`std::find`实现`std::lower_bound`的示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
template<typename ForwardIt, typename T>
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value)
{
ForwardIt it = std::find_if(first, last, [&](const auto& elem) { return elem >= value; });
return it;
}
int main()
{
std::vector<int> v{ 1, 2, 2, 3, 4, 5 };
auto it = lower_bound(v.begin(), v.end(), 3);
std::cout << "Lower bound of 3 is " << std::distance(v.begin(), it) << std::endl;
return 0;
}
```
输出:
```
Lower bound of 3 is 3
```
这个实现的时间复杂度是$O(n)$,而STL中的`std::lower_bound`的时间复杂度是$O(\log n)$,所以一般不建议使用上述实现。
阅读全文