C++ 頭文件系列(set)詳解
簡介
頭文件包含 set 、 multiset 兩個(gè)類模版,這里要描述的概念與map非常相似,甚至連成員函數(shù)都幾乎一樣,所以這篇隨筆會很短。
set
set如果翻譯成中文應(yīng)該是集合的意思,這里更確切的說是 唯一有序集合 ,性質(zhì)與map類似:
- 關(guān)聯(lián)性
- 元素唯一性
- 動態(tài)增長
- 有序性
此外的一個(gè)重要特點(diǎn)是:
Key與Value是同一個(gè)對象(自映射)
set == map
定義使用set的時(shí)候只需要傳入一個(gè)類型參數(shù),這個(gè)類型即是key,也是value。 實(shí)際上, set是map的特殊情況 ,雖然set沒有鍵值對這種元素形式,但set的key本身就是value,map上鍵值對得映射在這里可以看作是元素本身到本身的映射。 所以說, 兩者在實(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ù)。
一旦元素被插入集合,只能被刪除,不能被重新賦值。 可能對于集合這個(gè)概念來說,修改元素的動作太不常見了,所以標(biāo)準(zhǔn)庫索性就去掉了這個(gè)功能。
multiset
與multimap類似,這個(gè)類模版相當(dāng)于是支持多個(gè)鍵值的set版本。
相關(guān)文章
如何實(shí)現(xiàn)在C++中調(diào)用C函數(shù)
這篇文章主要介紹了如何實(shí)現(xiàn)在C++中調(diào)用C函數(shù)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
c++實(shí)現(xiàn)單純形法現(xiàn)行規(guī)劃問題的求解(推薦)
這篇文章主要介紹了c++實(shí)現(xiàn)單純形法現(xiàn)行規(guī)劃問題的求解,本文針對問題通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
C++中使用vector存儲并遍歷數(shù)據(jù)的基本步驟
C++標(biāo)準(zhǔn)模板庫(STL)提供了多種容器類型,包括順序容器、關(guān)聯(lián)容器、無序關(guān)聯(lián)容器和容器適配器,每種容器都有其特定的用途和特性,這篇文章主要介紹了C++中使用vector存儲并遍歷數(shù)據(jù)的基本步驟,需要的朋友可以參考下2025-01-01
C++實(shí)現(xiàn)洗牌發(fā)牌排序功能的示例代碼
本篇文章主要介紹了C++實(shí)現(xiàn)洗牌發(fā)牌排序功能的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10

