C++ 頭文件系列(set)詳解
簡(jiǎn)介
頭文件包含 set 、 multiset 兩個(gè)類模版,這里要描述的概念與map非常相似,甚至連成員函數(shù)都幾乎一樣,所以這篇隨筆會(huì)很短。
set
set如果翻譯成中文應(yīng)該是集合的意思,這里更確切的說(shuō)是 唯一有序集合 ,性質(zhì)與map類似:
- 關(guān)聯(lián)性
- 元素唯一性
- 動(dòng)態(tài)增長(zhǎng)
- 有序性
此外的一個(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ì)得映射在這里可以看作是元素本身到本身的映射。 所以說(shuō), 兩者在實(shí)現(xiàn)上應(yīng)該是有非常大的重合的 。 而從概念上來(lái)說(shuō),set完全可以由map來(lái)實(shí)現(xiàn),從而成為一個(gè)容器適配器。 但沒有那么做的原因,我想最大程度上是為了節(jié)約內(nèi)存吧,value值的保存完全是沒有必要的。
實(shí)現(xiàn)
通過查看VS 2013版本的C++頭文件可以發(fā)現(xiàn),set和map都是直接共有繼承的_Tree類(紅黑樹),沒有任何其他私有成員。 編碼上的可重用性,佐證了上述想法。
與map不同之處
要說(shuō)有什么不同,那就是set不提供元素修改的功能----沒有operator[]、at函數(shù)。
一旦元素被插入集合,只能被刪除,不能被重新賦值。 可能對(duì)于集合這個(gè)概念來(lái)說(shuō),修改元素的動(dòng)作太不常見了,所以標(biāo)準(zhǔn)庫(kù)索性就去掉了這個(gè)功能。
multiset
與multimap類似,這個(gè)類模版相當(dāng)于是支持多個(gè)鍵值的set版本。
- VC++開發(fā)中完美解決頭文件相互包含問題的方法解析
- C++中頭文件的概念與基本編寫方法
- VScode中添加頭文件和源文件(C/C++)的方法
- VSCode添加頭文件(C/C++)的實(shí)現(xiàn)示例
- 簡(jiǎn)單談?wù)凜++ 頭文件系列之(algorithm)
- VScode中C++頭文件問題的終極解決方法詳析
- C++用mysql自帶的頭文件連接數(shù)據(jù)庫(kù)
- VS C++頭文件引用提示“未定義標(biāo)識(shí)符”的問題解決
- 淺析VC++中的頭文件包含問題
- C++的頭文件和實(shí)現(xiàn)文件詳解
- C++頭文件解決問題場(chǎng)景小結(jié)
相關(guān)文章
如何實(shí)現(xiàn)在C++中調(diào)用C函數(shù)
這篇文章主要介紹了如何實(shí)現(xiàn)在C++中調(diào)用C函數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
c++實(shí)現(xiàn)單純形法現(xiàn)行規(guī)劃問題的求解(推薦)
這篇文章主要介紹了c++實(shí)現(xiàn)單純形法現(xiàn)行規(guī)劃問題的求解,本文針對(duì)問題通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
C++中使用vector存儲(chǔ)并遍歷數(shù)據(jù)的基本步驟
C++標(biāo)準(zhǔn)模板庫(kù)(STL)提供了多種容器類型,包括順序容器、關(guān)聯(lián)容器、無(wú)序關(guān)聯(lián)容器和容器適配器,每種容器都有其特定的用途和特性,這篇文章主要介紹了C++中使用vector存儲(chǔ)并遍歷數(shù)據(jù)的基本步驟,需要的朋友可以參考下2025-01-01
深入C語(yǔ)言把文件讀入字符串以及將字符串寫入文件的解決方法
本篇文章是對(duì)C語(yǔ)言把文件讀入字符串以及將字符串寫入文件的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
C++實(shí)現(xiàn)洗牌發(fā)牌排序功能的示例代碼
本篇文章主要介紹了C++實(shí)現(xiàn)洗牌發(fā)牌排序功能的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-10-10

