STL中的set/multiset實操總結

來源:互聯網
上載者:User

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);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.