一、set和multiset基礎(chǔ)
set和multiset會(huì)根據(jù)特定的排序準(zhǔn)則,自動(dòng)將元素進(jìn)行排序。不同的是后者允許元素重復(fù)而前者不允許。
需要包含頭文件:
#include <set>
set和multiset都是定義在std空間里的類模板:
只要是可復(fù)賦值、可拷貝、可以根據(jù)某個(gè)排序準(zhǔn)則進(jìn)行比較的型別都可以成為它們的元素。第二個(gè)參數(shù)用來定義排序準(zhǔn)則。缺省準(zhǔn)則less是一個(gè)仿函數(shù),以operator<對(duì)元素進(jìn)行比較。
所謂排序準(zhǔn)則,必須定義strict weak ordering,其意義如下:
1、必須使反對(duì)稱的。
對(duì)operator<而言,如果x<y為真,則y<x為假。
2、必須使可傳遞的。
對(duì)operator<而言,如果x<y為真,且y<z為真,則x<z為真。
3、必須是非自反的。
對(duì)operator<而言,x<x永遠(yuǎn)為假。
因?yàn)樯厦娴倪@些特性,排序準(zhǔn)則可以用于相等性檢驗(yàn),就是說,如果兩個(gè)元素都不小于對(duì)方,則它們相等。
二、set和multiset的功能
和所有關(guān)聯(lián)式容器類似,通常使用平衡二叉樹完成。事實(shí)上,set和multiset通常以紅黑樹實(shí)作而成。
自動(dòng)排序的優(yōu)點(diǎn)是使得搜尋元素時(shí)具有良好的性能,具有對(duì)數(shù)時(shí)間復(fù)雜度。但是造成的一個(gè)缺點(diǎn)就是:
不能直接改變?cè)刂?。因?yàn)檫@樣會(huì)打亂原有的順序。
改變?cè)刂档姆椒ㄊ牵合葎h除舊元素,再插入新元素。
存取元素只能通過迭代器,從迭代器的角度看,元素值是常數(shù)。