C++ 頭文件系列(set)詳解
簡介
頭文件包含 set 、 multiset 兩個(gè)類模版,這里要描述的概念與map非常相似,甚至連成員函數(shù)都幾乎一樣,所以這篇隨筆會(huì)很短。
set
set如果翻譯成中文應(yīng)該是集合的意思,這里更確切的說是 唯一有序集合 ,性質(zhì)與map類似:
- 關(guān)聯(lián)性
- 元素唯一性
- 動(dòng)態(tài)增長
- 有序性
此外的一個(gè)重要特點(diǎn)是:
Key與Value是同一個(gè)對(duì)象(自映射)
set == map
定義使用set的時(shí)候只需要傳入一個(gè)類型參數(shù),這個(gè)類型即是key,也是value。 實(shí)際上, set是map的特殊情況 ,雖然set沒有鍵值對(duì)這種元素形式,但set的key本身就是value,map上鍵值對(duì)得映射在這里可以看作是元素本身到本身的映射。 所以說, 兩者在實(shí)現(xiàn)上應(yīng)該是有非常大的重合的 。 而從概念上來說,set完全可以由map來實(shí)現(xiàn),從而成為一個(gè)容器適配器。 但沒有那么做的原因,我想最大程度上是為了節(jié)約內(nèi)存吧,value值的保存完全是沒有必要的。
實(shí)現(xiàn)
通過查看VS 2013版本的C++頭文件可以發(fā)現(xiàn),set和map都是直接共有繼承的_Tree類(紅黑樹),沒有任何其他私有成員。 編碼上的可重用性,佐證了上述想法。
與map不同之處
要說有什么不同,那就是set不提供元素修改的功能----沒有operator[]、at函數(shù)。
一旦元素被插入集合,只能被刪除,不能被重新賦值。 可能對(duì)于集合這個(gè)概念來說,修改元素的動(dòng)作太不常見了,所以標(biāo)準(zhǔn)庫索性就去掉了這個(gè)功能。
multiset
與multimap類似,這個(gè)類模版相當(dāng)于是支持多個(gè)鍵值的set版本。
相關(guān)文章
詳解C語言中的wait()函數(shù)和waitpid()函數(shù)
這篇文章主要介紹了C語言中的wait()函數(shù)和waitpid()函數(shù),注意其在中斷進(jìn)程方面用法的不同,需要的朋友可以參考下2015-08-08
OpenCV基于距離變換和分水嶺實(shí)現(xiàn)圖像分割
圖像分割是根據(jù)灰度、顏色、紋理和形狀等特征,把圖像分成若干個(gè)特定的、具有獨(dú)特性質(zhì)的區(qū)域。本文將基于距離變換和分水嶺實(shí)現(xiàn)圖像分割,需要的可以了解一下2022-09-09
C++中的std::initializer_list使用解讀
這篇文章主要介紹了C++中的std::initializer_list使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
C指針原理教程之編譯原理-小型計(jì)算器實(shí)現(xiàn)
本文給大家分享的是如何使用C語言編寫一個(gè)小型計(jì)算器的實(shí)例代碼,有需要的小伙伴可以參考下2019-02-02

