1. 程式人生 > 其它 >C++STL常用操作之lower_bound、upper_bound篇

C++STL常用操作之lower_bound、upper_bound篇

技術標籤:快速學習STL演算法c++資料結構

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)。


發現問題歡迎指正!

有不懂請留言!