1. 程式人生 > 其它 >c++/oop---STL find/ 函式物件 /關聯容器/set和map

c++/oop---STL find/ 函式物件 /關聯容器/set和map

find

template <class InIt,class T>
InIt find (InIt first, InIt last ,const T& val)
   

在[first,last) 按順序查詢和val相等的元素,如果找到就返回迭代器,否則就返回end

STL中的大小比較通過 < 實現

最好將 < 過載為全域性函式,否則可能會出錯

 

如果一個類將 () 運算子過載為成員函式,則這個類就稱為函式物件類,這個類的物件是函式物件

可以認為能夠將這個類的物件當成一個函式來使用

()是目數不限的運算子,過載為成員函式的時候有多少引數都可以。

 

關聯容器

關聯容器內部的元素是排好序的,有一下四種:

set

multiset

map

multimap

不可以修改 set/multiset 容器中元素的值,如果要修改,則應該先刪除再加入。

同理也不可以修改 map/multimap 容器中的元素的關鍵字

 

前置知識: pair 類模板

函式 make_pair (x,y) 生成一個 pair 類物件

 

multiset

成員函式

iterator find (const T & val)

iterator insert(const T & val)

int count(const T &val)

iterator lower_bound(const T & val )

查詢最大的位置 it 使得 [begin(),it) 中所有元素都比 val 小

iterator upper_bound(const t & val)

查詢最小位置 it 使得 [it,end()) 中所有元素都比 val 大

 

用 erase 成員函式刪除迭代器 it 指向的值以後,it 立即失效,++it 沒有意義

--it 使得it < s.begin() 時,it 立即失效,++it 沒有意義

 

multimap

template<class Key, class T,class Pred = less <key> >
class multimap{
    typedef pair<const Key,T> value_type
}

 

iterator find (const Key & val)

iterator insert(pair<Key,T> const & p) 

將 pair 物件 p 插入容器並返回其迭代器

int count(const Key &val)

iterator lower_bound(const Key & val )

查詢最大的位置 it 使得 [begin(),it) 中所有元素的 Key 都比 val 小

iterator upper_bound(const t & val)

查詢最小位置 it 使得 [it,end()) 中所有元素的 Key 都比 val 大

 

注意 multimap 不可以用[]