C++STL常用操作之lower_bound、upper_bound篇
阿新 • • 發佈:2021-01-25
C++STL常用操作之lower_bound、upper_bound篇
簡介:
#include<algorithm>
lower_bound(start,last,key)返回大於或者等於目標引數的第一個元素的位置
upper_bound(start,last,key)返回大於目標引數的第一個元素的位置
他們都有三個引數,第一個引數是查詢區間的開始位置,第二引數是查詢區間的結束位置的後一個位置,第三個引數是我們需要查詢的目標key值。
查詢區間是一個左閉右開的有序區間,從第一個和第二個引數我們也可以看出來。
如果沒有找到則返回last。
二分查詢,時間複雜度為O(logn)。
使用:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v(5);
int main() {
for (int i = 0; i < 5; ++i)
cin >> v[i];
cout << lower_bound(v.begin(), v.end(), 5) - v.begin() << endl;
//輸出第一個出現的大於5的位置
cout << upper_bound(v.begin(), v.end(), 5) - v.begin() << endl;
//輸出第一個出現的大於5的位置
cout << upper_bound(v.begin(), v.end(), 9) - v.begin() << endl;
//未找到則輸出last,這裡是v.end()
return 0;
}
我們輸入了2,3,5,6,8,在v中查詢到第一個大於或者等於5的數的位置是2(0開始,後同),第一個大於5的位置是3,所有的數字都小於等於9,所以第二個upper_bound返回值是v結束位置的後一個位置(5)。
發現問題歡迎指正!
有不懂請留言!