STL set詳解


其實map和set是一個爸爸 - 紅黑樹爸爸,只不過set力氣不夠,不像map那么可以擁有一個主鍵(key)和實鍵(value).它只有一個鍵值並且

set當中不能存儲相同的鍵值(set還具有強迫症). 其實map和set的區別差不多就完了. 他們的相同點,他們底層都是使用紅黑樹構造的

這使得他們的查找,插入,刪除的效率都非常的高. 並且他們都是有序的,這些都非常關鍵! 這是一個好的容器的標准.當然set的禁忌

也和map一樣,set不能存儲無法比較大小的數據. 因為構建紅黑樹需要比較大小. 而且在set中存儲相同的鍵值 ,新的就會覆蓋久的.

set的特性是,所有元素都會根據元素的鍵值自動被排序. 我們可以通過set的迭代器改變set的元素值嗎? 不行,因為set元素值就是其鍵

值,關系到set元素的排列規則,如果任意改變set元素值,會嚴重破壞set組織. set的源代碼之中看到,set<T>::iterator被定義為底層RB_

tree的const_iterator,杜絕寫入操作. 換句話說,set iterator是一種constant iterator(相對於mutable iterator).

set擁有與list相同的某些性質: 當客戶端對它進行元素新增操作或刪除操作時,操作之前的所有迭代器,在操作完成之后都依然有效,當然

那個被刪除元素迭代器必然是個例外.

set相關函數

begin 返回一個迭代器,此迭代器指向set中的第一個元素。
cbegin 返回一個常量迭代器,此迭代器指向set中的第一個元素。
cend 返回一個迭代器,此迭代器指向set最后一個元素的下一個位置
clear 清除set的所有元素。
crbegin 返回一個常量迭代器,此迭代器指向反向set中的第一個元素。
crbegin 返回一個常量迭代器,此迭代器指向反向set中的第一個元素。
crend 返回一個常量迭代器,此迭代器指向反向set中最后一個元素之后的位置。
emplace 將就地構造的元素插入到set。
emplace_hint 將就地構造的元素插入到set,附帶位置提示。
empty 如果set為空,則返回 true。
end 返回一個迭代器,此迭代器指向set最后一個元素的下一個位置
erase 從指定位置移除set中的元素或元素范圍。
find 返回一個迭代器,此迭代器指向set中其鍵與指定鍵相等的元素的位置。
get_allocator 返回集合中與給定值相等的上下限的兩個迭代器.
insert 將元素或元素范圍插入到set中的指定位置。
key_comp 將返回一個用於元素鍵值比較的函數
lower_bound 返回一個迭代器,此迭代器指向set中其鍵值等於或大於指定鍵的鍵值的第一個元素。
max_size 返回set的最大長度。
rbegin 返回一個迭代器,此迭代器指向反向set中的第一個元素。
rend 返回一個迭代器,此迭代器指向反向set中最后一個元素之后的位置。
size 返回set中的元素數量。
swap 交換兩個set的元素。
upper_bound 返回一個迭代器,此迭代器指向set中其鍵值大於指定鍵的鍵值的第一個元素。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM