STL中非常好用的二分查詢函式彙總

2021-08-31 09:50:29 字數 1738 閱讀 2473

1、搜尋某個元素是否存在,使用binary_search(beg,end,val)或binary_search(beg,end,val,op)

2、獲得被搜尋元素的位置,應使用lower_bound(),upper_bound()或equal_range()引數與以上相同

3、檢查若干個值是否存在bool includes(beg,end,searchbeg,searchend)或bool includes(beg,end,searchbeg,searchend,op)

需要注意:

1、以上函式的使用必須都只適用於已排序的序列

2、op是乙個可有可無的二元判斷式,被用來作為排序準則:op(elem1,elem2)

接下來看一下這幾個函式的使用

1、binary_search(beg,end,val)

返回乙個bool變數,以二分法檢索的方式在[beg,end]之間查詢val,找到返回true,找不到返回false。

2、lower_bound(beg,end,val)

返回乙個迭代器,指向非遞減序列[first, last)中的第乙個大於等於(>=)val的位置。 

3、upper_bound(beg,end,val)

返回乙個迭代器,指向非遞減序列[first, last)中的第乙個大於 (>) val的位置。

注意:對於lower_bound & upper_bound()還有乙個第四個引數greater(),他會把不小於(>=)變為不大於(<=)得查詢,把大於(>)變為小於(<)查詢,因此使用時要求序列不是遞增,而是遞減!!!此外,還必須加標頭檔案#include

4、equal_range(beg,end,val)

返回乙個迭代器對(i,j),其中i是在不破壞次序的前提下,value可插入的第乙個位置(>=亦即lower_bound),j則是在不破壞次序的前提下,value可插入的最後乙個位置(>亦即upper_bound)因此,[i,j)內的每個元素都等同於value,而且[i,j)是[beg,end)之中符合此一性質的最大子區間

注:以上函式的複雜度,如果搭配隨機訪問迭代器,則為對數複雜度,否則為線性複雜度;

5、bool includes(beg,end,searchbeg,searchend)

bool includes(beg,end,searchbeg,searchend,op)

返回乙個bool變數,兩種形式都用來判斷有序序列[beg,end)是否包含另乙個有序序列[searchbeg,searchend)的全部元素,也就是說對於[searchbeg,searchend)中的每乙個元素,如果[beg,end)必有乙個對應的相等元素,那麼[searchbeg,searchend)肯定是[beg,end)的子集。

複雜度:線性

接下來給出這幾種函式的使用**示例:

#include#include#include#includeusing namespace std;

int main()

; int a2=;

int a3=;

vectorvec(a,a+9);

vectorvec2(a2,a2+3);

vectorvec3(a3,a3+3);

int binary1=binary_search(vec.begin(),vec.end(),4);

cout<<"在陣列中查詢元素4,結果為:"《其中也要注意一下**中vector的初始化方法

想要輸出下標的話用(迭代器-beg)就可以了

ORACLE中非常好用的型別轉換函式CAST

cast with collections using multiset with a varray cast multiset as create or replace type cust address t oid 53a970b3f5024bec8efd4f84cad5e09e as obje...

介紹幾款開發中非常好用的軟體

notepad notepad 是一款windows環境下免費開源的 編輯器,功能十分強大。winmerge 檔案比較工具,在版本之間不同的時候查詢 變化的部分,十分方便 blog backup 可以備份csdn部落格,但是匯出html網頁功能需要註冊,不過不匯出也沒事。它把 上你部落格的內容給備份...

stl 二分查詢

在stl中對二分查詢進行了封裝,有兩種 upper bound,lower bound。例如 pos lower bound a,a n,value 查詢value值在長度為n的陣列a中的位置 關於返回值,函式lower bound 在first和last中的前閉後開區間進行二分查詢,返回大於或等於...