std::lower_bound()
std::lower_bound() 是一个 STL 库函数,它属于算法头库,在一个范围内找到搜索元素的下界。下限是指范围内大于或等于搜索元素的最小元素。
假设范围是:[4, 5, 6, 9, 12] 并且搜索元素是6,那么下限是6本身。如果搜索元素为 7,则下限为 9
案例:
- 当存在搜索元素时:
std::lower_bound()将迭代器返回到元素本身 - 当搜索元素不存在时:
- 如果所有元素都大于搜索元素:
lower_bound()返回一个迭代器到范围的开始。 - 如果所有元素都低于搜索元素:
lower_bound()返回到范围末尾的迭代器(不存在下限)。 - 否则,
lower_bound()返回一个迭代器到范围的搜索元素(比搜索元素大的最接近的元素)的下一个更大的元素
- 如果所有元素都大于搜索元素:
要使用 lower_bound(),需要对范围进行排序。
用法:
ForwardIterator lower_bound( ForwardIterator first, ForwardIterator last, const T& searching_element );
参数:
ForwardIterator first
:iterator 到范围的开始ForwardIterator last
:iterator 到范围的末尾const T& searching_element
:T
是数据类型和searching_element
是要找到下界的元素
返回类型:返回类型是范围中找到的下限的迭代器。
C++ 实现:
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> arr{ 6, 5, 9, 12, 4 };
//sort before using lower_bound()
sort(arr.begin(), arr.end());
int searching_element = 6;
vector<int>::iterator it;
it = lower_bound(arr.begin(), arr.end(), searching_element);
//if all eleemnts are smaller than the searching
//element then no lower bound exists
if (it == arr.end()) {
cout << "No lower bound exists\n";
}
else
cout << "Lower bound of " << searching_element << ":" << *it << endl;
searching_element = 7;
it = lower_bound(arr.begin(), arr.end(), searching_element);
//if all eleemnts are smaller than the searching
//element then no lower bound exists
if (it == arr.end()) {
cout << "No lower bound exists\n";
}
else
cout << "Lower bound of " << searching_element << ":" << *it << endl;
return 0;
}
输出:
Lower bound of 6:6 Lower bound of 7:9
在上面的 lower_bound() 函数中,使用默认比较器运算符 '<' 来比较元素之间。
但是我们有一个扩展版本函数,它使用用户定义的比较器来比较黑白元素。
ForwardIterator lower_bound( ForwardIterator first, ForwardIterator last, const T& searching_element, Comparator comp);
参数:
ForwardIterator first
:iterator 到范围的开始ForwardIterator last
:iterator 到范围的末尾const T& searching_element
:T
是数据类型和searching_element
是要找到下界的元素Comparator comp
:用户定义的比较器
返回类型:返回类型是范围中找到的下限的迭代器。
如果您有用户定义的数据类型,这会很有帮助。
相关用法
- C++ std::less_equal用法及代码示例
- C++ std::list::sort用法及代码示例
- C++ std::less用法及代码示例
- C++ std::max()用法及代码示例
- C++ std::string::push_back()用法及代码示例
- C++ std::is_member_object_pointer模板用法及代码示例
- C++ std::copy_n()用法及代码示例
- C++ std::string::insert()用法及代码示例
- C++ std::is_sorted_until用法及代码示例
- C++ std::iota用法及代码示例
- C++ std::numeric_limits::digits用法及代码示例
- C++ std::string::data()用法及代码示例
- C++ std::is_permutation用法及代码示例
- C++ std::all_of()用法及代码示例
- C++ std::string::compare()用法及代码示例
- C++ std::nth_element用法及代码示例
- C++ std::add_volatile用法及代码示例
- C++ std::forward_list::sort()用法及代码示例
- C++ std::uniform_int_distribution min()用法及代码示例
- C++ std::is_trivially_move_assignable用法及代码示例
注:本文由纯净天空筛选整理自 std::lower_bound() function with example in C++ STL。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。