簡(jiǎn)介
c/softtech/office/word/97196.html">頭文件包含 set 、 multiset 兩個(gè)類模版,這里要描述的概念與map非常相似,甚至連成員函數(shù)都幾乎一樣,所以這篇隨筆會(huì)很短。
set
set如果翻譯成中文應(yīng)該是集合的意思,這里更確切的說(shuō)是 唯一有序集合 ,性質(zhì)與map類似:
此外的一個(gè)重要特點(diǎn)是:
Key與Value是同一個(gè)對(duì)象(自映射)
set == map
定義使用set的時(shí)候只需要傳入一個(gè)類型參數(shù),這個(gè)類型即是key,也是value。 實(shí)際上, set是map的特殊情況 ,雖然set沒(méi)有鍵值對(duì)這種元素形式,但set的key本身就是value,map上鍵值對(duì)得映射在這里可以看作是元素本身到本身的映射。 所以說(shuō), 兩者在實(shí)現(xiàn)上應(yīng)該是有非常大的重合的 。 而從概念上來(lái)說(shuō),set完全可以由map來(lái)實(shí)現(xiàn),從而成為一個(gè)容器適配器。 但沒(méi)有那么做的原因,我想最大程度上是為了節(jié)約內(nèi)存吧,value值的保存完全是沒(méi)有必要的。
實(shí)現(xiàn)
通過(guò)查看VS 2013版本的C++頭文件可以發(fā)現(xiàn),set和map都是直接共有繼承的_Tree類(紅黑樹),沒(méi)有任何其他私有成員。 編碼上的可重用性,佐證了上述想法。
與map不同之處
要說(shuō)有什么不同,那就是set不提供元素修改的功能----沒(méi)有operator[]、at函數(shù)。
一旦元素被插入集合,只能被刪除,不能被重新賦值。 可能對(duì)于集合這個(gè)概念來(lái)說(shuō),修改元素的動(dòng)作太不常見了,所以標(biāo)準(zhǔn)庫(kù)索性就去掉了這個(gè)功能。
multiset
與multimap類似,這個(gè)類模版相當(dāng)于是支持多個(gè)鍵值的set版本。
新聞熱點(diǎn)
疑難解答