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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。