一、set和multiset基礎(chǔ)
set和multiset會根據(jù)特定的排序準則,自動將元素進行排序。不同的是后者允許元素重復(fù)而前者不允許。
需要包含頭文件:
#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ù)。