日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL_set集合容器+map映照容器

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL_set集合容器+map映照容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

set集合容器使用一種紅黑樹(Red-Black Tree)的平衡二叉檢索樹的數據結構,來組織泛華的元素數據。元素數據的檢索,使用二叉檢索樹得中序遍歷算法,檢索的效率高于vector、deque和list等容器。

?

紅黑樹的節點結構:

  color??? left?? parent?? right?? data?? (顏色? 左指針? 父指針? 右指針? 數據域)

?

紅黑樹在二叉檢索樹基礎上做的補充定義:(不要求子節點必須是黑色)

1、根節點是黑色

2、其他節點是紅色或者黑色

3、每個紅色節點的左右節點必須是黑色

4、每條從葉子節點到根節點的路經,都包含相同數目的黑色節點。

注:由性質3,紅黑樹的任何路經都不會出現兩個相鄰的紅色節點;由性質4,紅黑樹的所有從根節點到葉子結點的路徑中,最長路經不會超過最短路徑的2倍。

如圖,為了提供end函數返回的迭代器,在紅黑樹的結構上增設了一個頭結點,該頭結點的位置就是end函數的返回值,即最后一個原色的下一位置。頭結點的left指針指向紅黑樹的最左節點(即鍵值最小的節點),right指向指針的最右節點(鍵值最大的節點),parent指針指向紅黑樹的根節點。頭結點為紅色。

?

建樹過程:一般是每次插入一個新節點(黑色根節點除外),都著色為紅色。然后,再檢查紅黑樹的定義規則是否被破壞,否則要進行子樹的左右旋轉以作平衡處理。

插入節點:新節點必須先“著色”為紅色,因此,當父節點也是紅色節點時,所插入的新節點就會破壞原來的紅黑樹平衡。所以需要從當前插入位置開始上溯到根節點為止,檢查是否有父子節點連續出現紅色,如果是則進行相應的節點位置調整,使其節點“著色”滿足定義要求。

紅黑平衡調整函數(Rb_tree_rebalance):

1、當父節點和叔父節點都是紅色時,插入節點x,由于x必須是紅色,破壞了紅黑樹的定義要求。因此,可將父節點和叔父節點都改為黑色,祖父節點改為紅色,從而使x到其祖父節點符合紅黑樹的定義。然后繼續在祖父節點處往上執行平衡函數循環處理,直至頭結點。

2、父節點紅色叔父節點黑色時,由于原紅黑樹平衡,所以祖父節點為黑色。此時,插入節點x,出現沖突。為此現將父節點改為紅色,而叔父節點改為紅色。但是仍不能滿足紅黑樹路徑黑節點數相同的要求,再將x右轉,即以x的祖父節點為軸右旋轉,從而將黑色節點數維持為原紅黑樹的平衡數目。

注:其中1、2又分為父節點為左子樹和右子樹? 兩種情況。

刪除節點:每刪除一個節點,也必須要考慮紅黑平衡。

注:其中的find函數找所有節點中>=k并且<=k的節點處。

set插入節點調用:insert_unique();

multiset插入調用:insert_equal();

?

剛看完set數據集,馬上來到map映照容器。

map容器元素的數據結構:鍵值+映照數據

map的元素可通過pair封裝成一個結構對象,map容器要做的就是將這個pair對象插入到紅黑樹,完成一個元素的添加。同時,也要提供一個僅使用鍵值進行比較的函數對象,傳遞給紅黑樹。由此,可利用紅黑樹操作,將map元素數據插入到二叉樹中的正確位置,也可根據鍵值進行元素的刪除的檢索。

總結:map跟set的基礎數據結構一樣,只是在其上增長成為pair,而且map還定義了數組的“【】”操作符,不僅可用鍵值的方式訪問元素的映照數據,還可以用來添加map容器的元素。

multimap:多重映照容器。使用紅黑樹的insert_equal函數插入元素。允許元素鍵值的重復插入,使得數組操作符“【】”利用鍵值訪問失去意義,所以multimap并沒有定義數組方式的“【】”操作運算。

紅黑樹插入算法復雜度:查找復雜度:O(lgn)+修復復雜度(O(1),O(lgn))=O(lgn);

紅黑樹刪除算法復雜度:查找復雜度:O(lgn)+修復復雜度(O(1),O(lgn))=O(lgn);

轉載于:https://www.cnblogs.com/weiyi-mgh/p/6506957.html

總結

以上是生活随笔為你收集整理的STL_set集合容器+map映照容器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。