STL中set和multiset小結

(1)使用set/multiset以前必須包含頭文件<set>:#include<set>
  
(2) namespace std{
      template < class T, class Compare = less<T>,
                class Allocator = allocator<T> >
      class set;    
       template < class T, class Compare = less<T>,
                class Allocator = allocator<T> >
      class multiset;   
     }
只要是assignable、copyable、comparable的型別T均可以成爲set或multiset的元素型別。
set/multiset的排序準則必須是strict weak ordering其意義是:1必須是反對稱的,對判斷式op而言,若是op(x,y)爲真則op(y,x)爲假。2必須是可傳遞的,若是op(x,y)爲真且op(y,z)爲真則op(x,z)。3必須是非自反的,op(x,x)永遠爲假。
  
(3)set/multiset一般都是以平衡二叉樹來實現的,事實上set/multiset的實現版本大多以紅黑樹來實現,它保證節點安插時最多隻會作兩個從新鏈接動做,並且到達某一元素的最長路徑最多隻是最短路徑深度的兩倍。
  
(4)set/multiset的操做函數:
set c      產生一個空set/multiset
set c(op)      以op爲排序準則產生一個空set/multiset
set c1(c2)      產生某一個set/multiset的副本
set c(beg, end)      以區間[beg, end)內的元素產生一個set/multiset
set c(beg, end, op)    以op爲排序準則,以區間[beg, end)內的元素產生一個set/multiset
c.~set()      銷燬全部元素,釋放內存
其中set可爲下列形式:set<Elem>、set<Elem, op>、multiset<Elem>、multiset<Elem, op>
  
c.size()      返回當前的元素數量
c.empty()      判斷c是否爲空
c.max_size()      返回可容納的元素最大數值
c1 compare c2      compare可爲==,!=,<,>,<=和>=
  
c.count(elem)      返回「元素值爲elem」的元素個數
c.find(elem)      返回「元素值爲elem」的第一個元素的迭代器,若是找不到就返回end()
c.lower_bound(elem)      返回elem的第一個可安插位置,也就是「元素值>=elem」的第一個元素位置
c.upper_bound(elem)      返回elem的最後一個可安插位置,也就是「元素值>elem」的第一個元素位置
c.equal_range(elem)      返回elem的第一個和最後一個位置,也就是「元素值==elem」的第一個元素區間,返回值爲將lower_bound()和upper_bound()的返回值作成一個pair返回
  
c1 = c2      將c2所有元素賦值給c1
c1.swap(c2)      將c1和c2元素互換
  
c.begin()      返回一個雙向存取迭代器(將元素視爲常數),指向第一個元素
c.end()      返回一個雙向存取迭代器(將元素視爲常數),指向最後元素的下一個位置
c.rbegin()      返回一個逆向迭代器,指向逆向迭代的第一個元素
c.rend()      返回一個逆向迭代器,指向逆向迭代的最後元素的下一個位置
  
c.insert(elem)      插入一個elem副本並返回新元素的位置
c.insert(it, elem)      安插elem副本返回新元素的位置(it是一個提示指出安插操做的搜尋起點)
c.insert(beg, end)      插入區間[beg, end)內的全部元素副本,無返回值
c.erase(elem)      移除「與elem相等」的全部元素,返回被移除元素的個數
c.erase(it)      移除it位置上的元素,無返回
c.erase(beg, end)      移除[beg, end)區間內的全部元素,無返回
c.clear()      將容器清空
set提供以下接口:
pair<iterator, bool > insert( const value_type& elem);
pair結構中的second成員表示安插是否成功;first成員返回新元素的位置或返回現存的同值元素位置
iterator insert(iterator pos_hint, const value_type& elem);
multiset提供以下接口:
iterator insert( const value_type& elem);
iterator insert(iterator pos_hint, const value_type& elem);
 
相關文章
相關標籤/搜索