一、set和multiset基礎(chǔ)

set和multiset會根據(jù)特定的排序準則,自動將元素進行排序。不同的是后者允許元素重復(fù)而前者不允許。

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

需要包含頭文件:

#include <set>

set和multiset都是定義在std空間里的類模板:

只要是可復(fù)賦值、可拷貝、可以根據(jù)某個排序準則進行比較的型別都可以成為它們的元素。第二個參數(shù)用來定義排序準則。缺省準則less是一個仿函數(shù),以operator<對元素進行比較。

 

所謂排序準則,必須定義strict weak ordering,其意義如下:

1、必須使反對稱的。

對operator<而言,如果x<y為真,則y<x為假。

2、必須使可傳遞的。

對operator<而言,如果x<y為真,且y<z為真,則x<z為真。

3、必須是非自反的。

對operator<而言,x<x永遠為假。

因為上面的這些特性,排序準則可以用于相等性檢驗,就是說,如果兩個元素都不小于對方,則它們相等。

 

二、set和multiset的功能

和所有關(guān)聯(lián)式容器類似,通常使用平衡二叉樹完成。事實上,set和multiset通常以紅黑樹實作而成。

自動排序的優(yōu)點是使得搜尋元素時具有良好的性能,具有對數(shù)時間復(fù)雜度。但是造成的一個缺點就是:

不能直接改變元素值。因為這樣會打亂原有的順序。

改變元素值的方法是:先刪除舊元素,再插入新元素。

存取元素只能通過迭代器,從迭代器的角度看,元素值是常數(shù)。

 

網(wǎng)友評論