STL set讓你徹底搞清楚set的特性

2021-08-07 18:24:29 字數 1227 閱讀 6914

set的特性是,所有元素都會根據元素的鍵值自動被排序,set的元素不像map那樣可以同時擁有實值(value)和鍵值(key),set元素的鍵值就是實值,實值就是鍵值。set不允許兩個元素有相同的鍵值。

我們可以通過set的迭代器改變set的元素嗎?不行的,因為set元素值就是其鍵值,關係到set元素的排列規則。如果任意改變set元素值,會嚴重破壞set組織。稍後你會在set源**之中看到的,set<t>::iterator被定義為底層rb-tree的const_iterator,杜絕寫入操作。換句話說,set iterator是一種constant iterator(相對於mutable iterators)。

set擁有與list相同的某些性質:當客戶端對它進行元素新增操作(insert)或刪除操作(erase)時,操作之前的所有迭代器,在操作完成之後都依然有效。當然被刪除的那個元素的迭代器必然是個例外。

stl 特別提供了一組 set/multiset 相關的演算法,包括交集set_intersection、聯集set-union、差集set_difference、對稱差集set_symmetric_difference。

由於rb_tree是一種平衡二叉搜尋樹,自動排序的效果很不錯,所以標準的stlset即以rb_tree為底層機制。又由於set所開放的各種操作介面,rb_tree也都提供了,所以幾乎所有的set操作行為,都只是轉呼叫rb_tree的操作行為而已。

下面是set的源**摘錄,其中的注釋幾乎說明了一切,請仔細閱讀哦

徹底搞清楚SSL TLS

ssl secure sockets layer 最初由netscape定義,分別有sslv2和sslv3兩個版本 sslv1未曾對外發布 在sslv3之後ssl重新命名為tls。tls transport layer security 版本從tlsv1.0開始,tlsv1.0是在sslv3的基礎上...

徹底搞清楚css權重

乙個元素有多個樣式對他進行設定的時候,那麼哪個樣式會起作用呢?這就需要乙個規則計算,這個規則就是權重。誰的權重大,就使用那個樣式。根據w3c的規範,元素分為三個等級 我們按照剛才的規則進行分類計算,計算一下有幾個a,幾個b,幾個c。示例 body content data img hover 複製 ...

搞清楚你的 Rails Version

目前使用 rails 的網站,version 分成好幾派。rails 0.x 的就是幾年前就開始在使用 rails 的始祖,據我所知國內也是有網站還再用 0.x 他們之所以死撐不換的原因只有乙個,就是怕公升級上去原本的 code 根本不相容。1.0 的時候我沒趕上,那可能要問一些長輩才知道 1.0 ...