C++ 頭文件系列(set)詳解。本站提示廣大學習愛好者:(C++ 頭文件系列(set)詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 頭文件系列(set)詳解正文
簡介
頭文件包括 set 、 multiset 兩個類模版,這裡要描繪的概念與map十分類似,甚至連成員函數都簡直一樣,所以這篇隨筆會很短。
set
set假如翻譯成中文應該是集合的意思,這裡更確切的說是 獨一有序集合 ,性質與map相似:
此外的一個重要特點是:
Key與Value是同一個對象(自映射)
set == map
定義運用set的時分只需求傳入一個類型參數,這個類型即是key,也是value。 實踐上, set是map的特殊狀況 ,雖然set沒有鍵值對這種元素方式,但set的key自身就是value,map上鍵值對得映射在這裡可以看作是元素自身到自身的映射。 所以說, 兩者在完成上應該是有十分大的重合的 。 而從概念下去說,set完全可以由map來完成,從而成為一個容器適配器。 但沒有那麼做的緣由,我想最大水平上是為了浪費內存吧,value值的保管完全是沒有必要的。
完成
經過檢查VS 2013版本的C++頭文件可以發現,set和map都是直接共有承繼的_Tree類(紅黑樹),沒有任何其他公有成員。 編碼上的可重用性,佐證了上述想法。
與map不同之處
要說有什麼不同,那就是set不提供元素修正的功用----沒有operator[]、at函數。
一旦元素被拔出集合,只能被刪除,不能被重新賦值。 能夠關於集合這個概念來說,修正元素的舉措太不罕見了,所以規范庫索性就去掉了這個功用。
multiset
與multimap相似,這個類模版相當於是支持多個鍵值的set版本。