STL中的查詢

2022-05-14 12:04:50 字數 2211 閱讀 2626

#include
a.函式模板:binary_search(arr,arr+size , indx)

b.引數說明:

size:陣列元素個數

indx:需要查詢的值

c.函式功能: 在陣列中以二分法檢索的方式查詢,若在陣列(要求陣列元素非遞減)中查詢到indx元素則真,若查詢不到則返回值為假。a.函式模板:lower_bound(arr,arr+size , indx):

b.引數說明:

size:陣列元素個數

indx:需要查詢的值

c.函式功能: 函式lower_bound()在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置(注意是位址)。如果所有元素都小於val,則返回last的位置

d.舉例如下:

乙個陣列number序列為:4,10,11,30,69,70,96,100.設要插入數字3,9,111.pos為要插入的位置的下標,則 /注意因為返回值是乙個指標,所以減去陣列的指標就是int變數了/

pos = lower_bound( number, number + 8, 3) - number,pos = 0.即number陣列的下標為0的位置。

pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number陣列的下標為1的位置(即10所在的位置)。

pos = lower_bound( number, number + 8, 111) - number, pos = 8,即number陣列的下標為8的位置(但下標上限為7,所以返回最後乙個元素的下乙個元素)。

e.注意:函式lower_bound()在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置。如果所有元素都小於val,則返回last的位置,且last的位置是越界的!

返回查詢元素的第乙個可安插位置,也就是「元素值》=查詢值」的第乙個元素的位置a.函式模板:upper_bound(arr,arr+size , indx):

b.引數說明:

size:陣列元素個數

indx:需要查詢的值

c.函式功能:函式upper_bound()返回的在前閉後開區間查詢的關鍵字的上界,返回大於val的第乙個元素位置

例如:乙個陣列number序列1,2,2,4.upper_bound(2)後,返回的位置是3(下標)也就是4所在的位置,同樣,如果插入元素大於陣列中全部元素,返回的是last。(注意:陣列下標越界)

返回查詢元素的最後乙個可安插位置,也就是「元素值》查詢值」的第乙個元素的位置 。

1、algorithm中的函式

其呼叫形式為

find(start,end,value)

start搜尋的起點,end搜尋的終點,要尋找的value值

容器的表示方法

find(a.begin(),a.end(),value)

陣列的表示方法

find(a,a+length,val)

所有的返回,均是迭代器(容器)或指標(陣列),而非是直觀感覺上的索引下標。如果在查詢範圍內不存在,返回a.end(),這裡需要注意的是,a.end()不在查詢範圍內。

2、各個容器自己實現的成員函式

vector沒有實現find函式,除此之外,常見容器都實現了自己的find函式。

string是這一種順序儲存結構,其find函式返回的是下標索引。set,map,multiset,multimap都不是順序索引的資料結構,所以返回的是迭代器。

3、如果元素不在

對於返回迭代器的查詢,通過判斷find(a.begin(),a.end(),value)==a.end(),來判斷元素是否存在

對於string,通過a.find(val)==string::npos判斷1)count(first,last,value):first是容器的首迭代器,last是容器的末迭代器,value是詢問的元素,整個函式返回int型。count函式的功能是:統計容器中等於value元素的個數。

2)count_if(first,last,comp) (在comp為true的情況下計數) 或者 count_if(first,last,value,comp) (這個是在comp為true的情況下統計容器中等於value的元素):first為首迭代器,last為末迭代器,value為要查詢的元素,comp為比較bool函式,為true則計數,函式返回型是int。

/注:此兩個函式複雜度是線性的,適用於小規模運算。/

STL中的查詢演算法

stl中有很多演算法,這些演算法可以用到乙個或多個stl容器 因為stl的乙個設計思想是將演算法和容器進行分離 也可以用到非容器序列比如陣列中。眾多演算法中,查詢演算法是應用最為普遍的一類。單個元素查詢 1 find 比較條件為元素是否相等的查詢 template inputiterator fin...

STL中的二分查詢

本文 於 使用的時候注意 必須用在非遞減的區間中 二分查詢的原理非常簡單,但寫出的 中很容易含有很多bug,二分查詢一文中講解過如何實現不同型別的二分查詢,但是否一定要自己去實現二分查詢呢?答案顯然是否定的,本文將講解stl中與二分查詢有關函式的具體使用方法及其實現原理。stl中與二分查詢相關的函式...

STL中的二分查詢(binary search)

stl中對於有序序列 vector,list等 提供了相當相當強大的二分搜尋binary search演算法。對於可以隨機訪問容器 如vector等 binary search負載度為對數級別 logn 對於非隨機訪問容器 如list 則演算法複雜度為線性。現在簡要介紹一下幾種常用的binary s...