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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

map/set/multi_map/multi_set/unorder_map/unorder_set总结

發布時間:2024/4/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 map/set/multi_map/multi_set/unorder_map/unorder_set总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

map/set/multi_map/multi_sep底層實現是加頭節點的紅黑樹,元素之間有序,當存放的是自定義類型的時候要重載operator<,中序遍歷的時候是有序的。增刪查的時間復雜度都是O(lgN)

map存放的是鍵值對<key,value>,,key唯一,value可以重復,不能修改key的值,可以先刪除舊的值,再添加新的值,value的值可以修改。

set用戶存放的是值,但是底層存放的仍能存放的是鍵值對,只不過key=value,同樣的值是唯一的,不能隨便修改value.

mulit_map/multi_set與map/set相比,大部分都是相同的,只是存放的元素可以不唯一,可以重復。

set/multiset不區分鍵值和實值,其鍵值就是實值,會根據待定的排序準則,自動將元素排序。兩者唯一的不同在于前者不允許元素重復(底層調rb_tree::insert_unique()),而后者允許(底層調用rb_tree::insert_equal())。?
和set相比,map/multimap同時擁有實值(value)和鍵值(key),其每一個元素都是pair<key,value>,pair的第一個元素是鍵值,第二個元素是實值。map和multimap的唯一區別在于,map不允許兩個元素擁有相同的鍵值(底層調rb_tree::insert_unique()),而multimap允許存在重復的鍵值(底層調用rb_tree::insert_equal())。




unordered_map/unordered_set底層實現用了哈希表,

(1)unordered_set存放的是value,unorder_map也是存儲的key-value的值,可以通過key快速索引到value,但是不會根據key的大小進行排序,增刪查的時間復雜度都是O(1)

(2)同樣不能修改key值當存放的是自定義的元素類型的時候,需要定義hash_value函數并且重載operator==,重載operator==是因為,如果兩個元素的通過哈希函數計算出的值相同,并不能斷定這兩個元素就相同,必須再調用operator==。

(3)散列值相同的被存儲在一個桶里。當散列容器中有大量數據時,同一個桶里的數據也會增多,造成訪問沖突,降低性能。為了提高散列容器的性能,unordered庫會在插入元素是自動增加桶的數量,不需要用戶指定。但是,用戶也可以在構造函數或者rehash()函數中,指定最小的桶的數量

unordered_map/unordered_set ?與map/set結論:

運行效率方面:unordered_map/unordered_set?最高,而map/set效率較低但 提供了穩定效率和有序的序列。

占用內存方面:map/set內存占用略低,unordered_map/unordered_set內存占用略高,而且是線性成比例的。





總結

以上是生活随笔為你收集整理的map/set/multi_map/multi_set/unorder_map/unorder_set总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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