STL中的查詢演算法

2021-09-08 12:04:41 字數 2717 閱讀 7651

stl中有很多演算法,這些演算法可以用到乙個或多個stl容器(因為stl的乙個設計思想是將演算法和容器進行分離),也可以用到非容器序列比如陣列中。眾多演算法中,查詢演算法是應用最為普遍的一類。

單個元素查詢

1、 find() 比較條件為元素是否相等的查詢:

template inputiterator find (inputiterator first, inputiterator last, const t& val);

bool cmpfunction (int i) 

it = std::find_if (myvector.begin(), myvector.end(), cmpfunction);

std::cout << "first:" << *it <

4、min_element() 查詢給定區間內最小值

5、max_element() 查詢給定區間內最大值

template bool binary_search (forwarditerator first, forwarditerator last, const t& val)

7、lower_bound() 返回有序序列給定區間[first, last) (左閉右開)內的第乙個大於等於value的位置。如果所有元素都小於value,則返回last。

template< class forwarditerator, class type >

forwarditerator lower_bound( forwarditerator first, forwarditerator last, const type &value );

template< class forwarditerator, class type, class compare>

forwarditerator lower_bound( forwarditerator first, forwarditerator last, const type &value, compare comp ); //支援自定義比較函式

8、upper_bound() 返回有序序列給定區間[first, last) (左閉右開)內的第乙個大於value的位置。如果所有元素都小於等於value,則返回last。

template< class forwarditerator, class type >

forwarditerator upper_bound( forwarditerator first, forwarditerator last, const type &value );

template< class forwarditerator, class type, class compare>

forwarditerator upper_bound( forwarditerator first, forwarditerator last, const type &value, compare comp ); //支援自定義比較函式

其中lower_bound/upper_bound 可以用於任何支援隨機訪問的容器中,比如vector,deque,陣列。對於不支援隨機訪問的容器如 set/map,這些容器有同名的方法來進行 lower_bound/upper_bound 操作。

map::lower_bound(key):返回map中第乙個大於或等於key的迭代器指標

map::upper_bound(key):返回map中第乙個大於key的迭代器指標

set::lower_bound(val):返回set中第乙個大於或等於val的迭代器指標

set::upper_bound(val):返回set中第乙個大於val的迭代器指標

區間查詢(區間整體匹配)

int needle1 = ;

it = std::search (myvector.begin(), myvector.end(), needle1, needle1+2);

if (it!=myvector.end())

std::cout << "needle1 found at position " << (it-myvector.begin()) << '\n';

search() 支援自定義比較函式,比如查詢給定區間中每個元素比目標區間小1的子區間:

bool cmpfunction (int i, int j) 

int myints = ;

std::vectorhaystack (myints,myints+10);

int needle2 = ;

// using predicate comparison:

it = std::search (haystack.begin(), haystack.end(), needle2, needle2+3, cmpfunction);

3、equal() 判斷兩個區間是否相等

4、mismatch() 查詢兩個區間首次出現不同的位置

集合查詢(集合內任意乙個元素匹配)

find_first_of() 查詢給定集合中的任意乙個元素

STL 查詢演算法

可以按是否需要排序區間分為兩組 a.count,find b.binary search,lower bound,upper bound,equal range a組不需排序區間,b組需要排序區間。當乙個區間被排序,優先選擇b組,因為他們提供對數時間的效率。而a則是線性時間。另外a組b組所依賴的查詢...

STL中的查詢

includea.函式模板 binary search arr,arr size indx b.引數說明 size 陣列元素個數 indx 需要查詢的值 c.函式功能 在陣列中以二分法檢索的方式查詢,若在陣列 要求陣列元素非遞減 中查詢到indx元素則真,若查詢不到則返回值為假。a.函式模板 low...

STL常用的查詢演算法 13

函式名 標頭檔案函式功能 adjacent find 在iterator對標識元素範圍內,查詢一對相鄰重複元素,找到則返回指向這對元素的第乙個元素的forwarditerator 否則返回last.過載版本使用輸入的二元操作符代替相等的判斷 函式原形 templatefwdit adjacent f...