std::map 和 std::unordered_map 特性和各操作時間複雜度?
1)std::map對應的資料結構是紅黑樹。紅黑樹是一種近似於平衡的二叉查詢樹,裡面的資料是有序的。在紅黑樹上做查詢、插入、刪除操作的時間複雜度為o(logn)。
2)std::unordered_map對應雜湊表,雜湊表的特點就是查詢效率高,時間複雜度為常數級別o(1), 而額外空間複雜度則要高出許多。
所以對於需要高效率查詢的情況,使用std::unordered_map容器,但是std::unordered_map對於迭代器遍歷效率並不高。而如果對記憶體大小比較敏感或者資料儲存要求有序的話,則可以用std::map容器。
3)unordered_map和map類似,都是儲存的key-value的值,可以通過key快速索引到value。不同的是unordered_map不會根據key的大小進行排序,儲存時是根據key的hash值判斷元素是否相同,即unordered_map內部元素是無序的,而map中的元素是按照二叉搜尋樹儲存,進行中序遍歷會得到有序遍歷。
所以使用時map的key需要定義operator<。而unordered_map需要定義hash_value函式並且過載operator==。但是很多系統內建的資料型別都自帶這些,那麼如果是自定義型別,那麼就需要自己過載operator《或者hash_value()了。
結論:如果需要內部元素自動排序,使用map,不需要排序使用unordered_map
C 學習筆記 (19)異常
為什麼要進行異常處理 如果沒有異常處理,當出現問題時,作業系統會直接將程式終止,處理方式不太友好。因此需要更友好一些的方式來處理異常。例如如下 static void main string args catch finally 將 放到try中進行執行,如果出現異常首先到catch中尋找可以解決的...
析構函式(C 學習筆記 19)
一 什麼是析構函式?析構函式也是一種特殊的成員函式。它執行與建構函式相反的操作,通常用於執行一些清理任務,如釋放分配給物件的記憶體空間等。二 析構函式的特點是什麼?1 析構函式名與類名相同,但它前面必須加乙個波浪號 2 析構函式不返回任何值。在定義析構函式時,是不能說明它的型別的,甚至說明為void...
java學習筆記 19
1 字元流 掌握 1 位元組流操作中文資料不是特別的方便,所以就出現了轉換流。轉換流的作用就是把位元組流轉換字元流來使用。2 轉換流其實是乙個字元流 字元流 位元組流 編碼表 3 編碼表 a 就是由字元和對應的數值組成的一張表 b 常見的編碼表 ascii iso 8859 1 gb2312 gbk...