STL中的查找算法
????STL中有很多算法,這些算法可以用到一個(gè)或多個(gè)STL容器(因?yàn)镾TL的一個(gè)設(shè)計(jì)思想是將算法和容器進(jìn)行分離),也可以用到非容器序列比如數(shù)組中。眾多算法中,查找算法是應(yīng)用最為普遍的一類。
單個(gè)元素查找
1、 find() 比較條件為元素是否相等的查找:
template <class InputIterator, class T>InputIterator find (InputIterator first, InputIterator last, const T& val);2、find_if() 自定義比較函數(shù)?
從給出的區(qū)間中查找第一個(gè)滿足比較函數(shù)的元素
3、count() 統(tǒng)計(jì)元素出現(xiàn)的次數(shù)?
std::count() 統(tǒng)計(jì)區(qū)間中某個(gè)元素出現(xiàn)的次數(shù)?
std::count_if() 自定義比較函數(shù)
4、min_element() 查找給定區(qū)間內(nèi)最小值
5、max_element() 查找給定區(qū)間內(nèi)最大值
6、binary_search() 有序區(qū)間的二分查找?
binary_search() 用來在一個(gè)有序區(qū)間中使用二分法查找元素是否在這個(gè)區(qū)間中,該算法的返回值為bool表示是否存在。
?
7、lower_bound() 返回有序序列給定區(qū)間[first, last) (左閉右開)內(nèi)的第一個(gè)大于等于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 ); //支持自定義比較函數(shù)?
8、upper_bound() 返回有序序列給定區(qū)間[first, last) (左閉右開)內(nèi)的第一個(gè)大于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 ); //支持自定義比較函數(shù)?
其中l(wèi)ower_bound/upper_bound 可以用于任何支持隨機(jī)訪問的容器中,比如vector,deque,數(shù)組。對(duì)于不支持隨機(jī)訪問的容器如 set/map,這些容器有同名的方法來進(jìn)行 lower_bound/upper_bound 操作。
map::lower_bound(key):返回map中第一個(gè)大于或等于key的迭代器指針 map::upper_bound(key):返回map中第一個(gè)大于key的迭代器指針 set::lower_bound(val):返回set中第一個(gè)大于或等于val的迭代器指針 set::upper_bound(val):返回set中第一個(gè)大于val的迭代器指針?
區(qū)間查找(區(qū)間整體匹配)
1、search() 查找子區(qū)間首次出現(xiàn)的位置?
find() 用來查找單個(gè)元素,search() 用來查找一個(gè)子區(qū)間,比如 從myvector中查找自取件[20, 30] 的位置
?
search() 支持自定義比較函數(shù),比如查詢給定區(qū)間中每個(gè)元素比目標(biāo)區(qū)間小1的子區(qū)間:
bool cmpFunction (int i, int j) {return (i-j==1); } int myints[] = {1,2,3,4,5,1,2,3,4,5}; std::vector<int> haystack (myints,myints+10);int needle2[] = {1,2,3}; // using predicate comparison: it = std::search (haystack.begin(), haystack.end(), needle2, needle2+3, cmpFunction);?
2、find_end() 查找子區(qū)間最后一次出現(xiàn)的位置?
search()查找子區(qū)間第一次出現(xiàn)的位置,而find_end() 用來查找子區(qū)間最后一次出現(xiàn)的位置,find_end()支持自定義比較函數(shù)。
3、equal() 判斷兩個(gè)區(qū)間是否相等
4、mismatch() 查詢兩個(gè)區(qū)間首次出現(xiàn)不同的位置
集合查找(集合內(nèi)任意一個(gè)元素匹配)
find_first_of() 查找給定集合中的任意一個(gè)元素
總結(jié)
- 上一篇: 裁剪图片、添加水印
- 下一篇: JavaScript属性操作