STL原始碼 map set與其他順序容器的一些比較

2021-06-29 11:36:42 字數 1947 閱讀 2778

map的操作參考文章《c++ primer 學習筆記_35_stl實踐與分析(9)--map型別(上)

》《c++ primer 學習筆記_36_stl實踐與分析(10)--map型別(下)

》map的特性:所有元素會按照元素的鍵值自動排序。map所有元素都是pair,第乙個元素視為鍵值,第二個元素視為實值;map不允許兩個元素擁有相同的鍵值。

可以修改元素的實值,但是不能修改元素的鍵值(鍵值是const型別的),因此map的迭代器既不是constant iterators,也不是mutale iterators。

set的操作參考文章《c++ primer 學習筆記_37_stl實踐與分析(11)--set型別

set是stl中的標準容器,set裡面的元素會根據鍵值自動排序,它不像map那樣擁有實值value和鍵值key的對應,set只有實值。set的底層實現是rb-tree,當插入到rb-tree中後,其值不能再更改,因為更改就意味著可能不符合rb-tree的特性了,所以其迭代器set::iterator是rb-tree的constrant iterator。由於set底層是rb-tree,所以set在插入等操作之後,迭代器不會失效,但刪除元素的迭代器是個例外

當只想知道乙個值是否存在時,使用set容器最合適。因為set是自動排序的,不會存在相同的元素,因此可以很輕易判斷某個元素是否存在於set中。例如可以輕鬆找到某個人名是否存在於列表:

string name;

setsset;

cin >> name;

if (set.count(name))

cout << "找到了" << endl;

上述**輸入乙個name,通過set的count函式判斷name是否存在於set中。若存在count返回1,否則返回0.

map與vector的區別

(1)用下標訪問map中並不存在的元素會導致在map容器中新增該元素,該元素鍵即為該下標值。能作為map下標的型別必須是定義了「小於」操作符的型別,因為鍵值在標準庫中預設是通過小於操作比較的。

(2)當對元素進行插入或刪除操作時,操作之前的所有迭代器,在操作完成後依然有效;當然被刪除那個元素的迭代器是例外。(set與map類似)。這是由於其內部結構決定的。map和set的底層容器是rb-tree,是指標之間連線元素的,因此插入刪除不會導致迭代器失效。

但是vector(包括deque)的插入或刪除操作卻可能是部分或全部迭代器失效。這同樣是由其底層實現機制決定的,因為vector和list插入或刪除都會重新分配空間,這樣迭代器肯定會失效。關於vector以及deque的空間分配方法參考文章《stl原始碼:vector

》《stl原始碼:deque

》。map與set的區別以及適用範圍

相同點:都儲存鍵值。

都要保證鍵值的唯一性,而且不能修改。

都支援建構函式、insert、erase和count、find等操作。

set純粹是鍵的集合,而map是pair的集合。

map適合用於需要了解鍵值與值之間對應關係的情況,例如,字典,要了解單詞(鍵)與其解釋(值)之間對應關係的情況;set適用於僅需判斷某值是否存在的情況,例如判斷某人姓名是否在名單中。

set與list的區別

乙個相同點:當對元素進行插入或刪除操作時,操作之前的所有迭代器,在操作完成後依然有效;當然被刪除那個元素的迭代器是例外。(map和set類似)

主要差別:set的元素不能修改,list無此限制。

set適用於儲存元素值不變的集合,list適用於儲存會發生變化的元素。

JQuery 書籍與其原始碼

learning jquery 1.3最新版 div.horizontal eq 1 nth child index even odd equation 匹配其父元素下的第n個子或奇偶元素 first child first 只匹配乙個元素,而此選擇符將為每個父元素匹配乙個子元素 odd 匹配所有索...

STL 原始碼閱讀

1 這裡可以看出來,容器將迭代器作為類成員。vectora iteratorite a.begin 容器的成員函式可以返回迭代器,所以迭代器是容器的成員物件。2 個人理解,迭代器是對指標的封裝和提公升,盡可能遮蔽資料結構的底層細節,對外提供統一的操作介面,這些介面跟普通指標的功能類似,比如自增或自減...

STL原始碼簡述

stl是standard template library的簡稱,中文名標準模板庫,惠普實驗室開發的一系列軟體的統稱。從根本上說,stl是一些 容器 的集合,這些 容器 有list,vector,set,map等,stl也是演算法和其他一些元件的集合。這裡的 容器 和演算法的集合指的是世界上很多聰明...