📅  最后修改于: 2023-12-03 14:51:15.009000             🧑  作者: Mango
在C++中,STL(标准模板库)提供了许多方便易用的函数和算法,其中包括了lower_bound()
函数。lower_bound()
函数可在已排序的范围内查找元素,并返回范围内第一个大于等于给定值的元素的位置,该函数适用于STL中的任何容器,如vector、set、map等。
lower_bound()
函数的函数原型如下:
template<class ForwardIt, class T>
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value);
其中:
ForwardIt
:要查找的范围的迭代器类型,通常为指向容器元素的随机访问迭代器。first
:起始迭代器,指向要查找的容器中的第一个元素。last
:终止迭代器,指向要查找的容器中的最后一个元素(不包含在内,即半开区间)。value
:要查找的值。函数返回一个迭代器,该迭代器指向范围内第一个大于等于给定值的元素。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec{ 1, 2, 2, 4, 4, 4, 6, 7, 8 };
int target = 4;
auto it = std::lower_bound(vec.begin(), vec.end(), target);
if (it != vec.end() && *it == target) {
std::cout << "Found " << target << " at index " << std::distance(vec.begin(), it) << std::endl;
}
else {
std::cout << target << " not found" << std::endl;
}
return 0;
}
以上代码首先创建了一个整数向量vec
,然后定义了一个搜索目标target
,并使用lower_bound()
函数搜索此目标。最后,如果该目标存在于向量中,则输出该值所在的索引,否则输出“not found”。
lower_bound()
函数,必须确保容器已按升序排序。否则,函数的行为将不可预测。lower_bound()
函数只返回第一个出现的元素位置。lower_bound()
函数在查找某个值的位置时非常有用,特别是对于已排序的容器。在需要对排序的数据进行搜索时,它是一个有用的工具。