Effective_STL 學習筆記(二十三) 考慮用有序 vector 代替關聯容器
標準關聯容器的典型實現是平衡二叉查詢樹,
一個平衡二叉查詢樹是一個對插入、刪除和查詢的混合操作優化的資料結構
1. 建立。通過插入很多元素建立一個新的資料結構
2. 查詢。在資料結構中查詢指定的資訊片。
3. 重組。修改資料結構的內容,也許通過刪除所有現有資料和在原地插入新資料。
有時,一個 vector 可能比一個關聯容器能提供更高的效能(時間和空間),
通過有序 vector 使用查詢演算法—— binary_search、lower_bound、equal_range等
對於為什麼一個有序的 vector 的二分查詢比一個二叉樹的二分查詢效能更好:
1. 大小問題
2. 引用區域性性問題
概要:在有序 vector 中儲存資料很可能比在標準關聯容器中儲存相同的資料消耗更少的記憶體;當頁面錯誤值得重視的時候,在有序 vector 中通過二分查詢可能比在一個標準關聯容器中查詢更快。
有序 vector 的最大缺點是它必須保持有序!當新元素插入時,大於這個新元素的所有東西都必須向上移動一位,如果重新分配記憶體,則更加昂貴,所以只有你知道你的資料結構使用的時候查詢幾乎不和插入和刪除混合時,使用有序 vector 代替關聯容器才有意義。
相關推薦
Effective_STL 學習筆記(二十三) 考慮用有序 vector 代替關聯容器
標準關聯容器的典型實現是平衡二叉查詢樹, 一個平衡二叉查詢樹是一個對插入、刪除和查詢的混合操作優化的資料結構 1. 建立。通過插入很多元素建立一個新的資料結構 2. 查詢。在資料結構中查詢指定的資訊片。 3. 重組。修改資料結構的內容,也許通過刪除所有現有資料和在原地插入新資料。 &
Effective_STL 學習筆記(四十三) 儘量用演算法呼叫代替手寫迴圈
每一個演算法接受至少一對用來指示將被操作物件區間的迭代器,比如,min_element 可以找出此區間中的最小的值,而 accumulate 則對區間內的元素作某種形式的整體求和運算,partition 將區間內的元素分割為滿足和不滿足某某判決條件的兩個部分。演算法執行時,他們進行檢查指示給它
Java學習筆記(二十三):final關鍵字
類繼承 ron 滿足 單詞 靜態 bsp 條件 str 進行 final關鍵字有三種使用場景: final修飾類 final修飾方法 final修飾變量 final修飾的類,不能再有子類繼承。 只要滿足以下條件就可以把一個類設計為final類: 不是專門為繼承而設
Linux學習筆記(二十三)shell介紹、history命令歷史、命令補全和別名、通配符、
alias shell 歷史命令 通配符 一、shell介紹 shell是一個命令解釋器,提供用戶和機器之間的交互 支持特定語法,比如邏輯判斷、循環 每個用戶都可以有自己特定的shell CentOS7默認shell為bash(Bourne Agin Shell) 還有zsh、ksh等、二、
Effective_STL 學習筆記(二十) 為指標的關聯容器指定比較型別
對於 string* 指標的 set,列印 set <string*> ssp 內容: 1 for( set<string*>::const_iterator i = ssp.begin(); i != ssp.end(); i++ ) 2 cout&
Effective_STL 學習筆記(四十三) 盡量用算法調用代替手寫循環
學習 code 復雜 public gin ron nsf 優勢 col 每一個算法接受至少一對用來指示將被操作對象區間的叠代器,比如,min_element 可以找出此區間中的最小的值,而 accumulate 則對區間內的元素作某種形式的整體求和運算,partiti
TensorFlow學習筆記(二十三)四種Cross Entropy交叉熵演算法實現和應用
交叉熵(Cross-Entropy) 交叉熵是一個在ML領域經常會被提到的名詞。在這篇文章裡將對這個概念進行詳細的分析。 1.什麼是資訊量? 假設是一個離散型隨機變數,其取值集合為,概率分佈函式為 p ( x ) = r (
Django學習筆記(二十三):Celery非同步操作傳送郵件
非同步操作傳送郵件 在settings.py裡新增郵箱配置 from os import environ # 郵件配置 EMAIL_USE_SSL = True EMAIL_HOST = 'smt
tensorflow學習筆記(二十三):variable與get_variable
Variable tensorflow中有兩個關於variable的op,tf.Variable()與tf.get_variable()下面介紹這兩個的區別 tf.Variable與tf.get_variable() tf.Variable(ini
Linux學習筆記(二十三) -- QT的安裝和解除安裝
1.QT簡介 Qt 是一個跨平臺C++圖形使用者介面應用程式開發框架。它可以用來開發GUI程式和非GUI程式(比如控制檯工具和伺服器)。 2.QT安裝 使用如下命令: sudo apt-get install qt5-default qtcreato
Unity3D學習筆記(二十三):事件接口、虛擬搖桿、層級管理和背包系統
ram veh ces 跟隨鼠標 style 組件 屏幕 向上 grid 事件接口 IDragHandler(常用):鼠標按下拖動時執行(只要鼠標在拖動就一直執行) IDropHandler:對象拖動結束時,如果鼠標在物體的範圍內,執行一次(依賴於IDragHandler存
openCV學習筆記(二十三) —— 形態學濾波—— 開運算、閉運算、形態學梯度、頂帽、黑帽
原理 程式 #include<opencv2/opencv.hpp> using namespace std; using namespace cv; /* 巨集定義 */ #define ORIGINAL_WINDOW
Effective_STL 學習筆記(二十九) 需要一個一個字元輸入時考慮使用 istreambuf_iterator
使用 istreambuf_iterator : 1 ifstream inputFile( "interestingData.txt" ); 2 string fileData( (ifstreambuf_iterator<char>(inputFile)), i
Effective_STL 學習筆記(二)小心對 “容器無關程式碼” 的幻想
STL 是建立在泛化上的,陣列泛化為容器,引數化了所包含的物件的型別。函式泛化為演算法,引數化了所用的迭代器型別。指標泛化為迭代器,引數化了所指向物件的型別。 泛化繼續,獨立的容器型別泛化為序列或關聯容器。標準的記憶體相鄰的容器都提供隨機訪問迭代器,標準的基於節點的容器都提供雙向迭代
Effective_STL 學習筆記(二十一) 永遠讓比較函式對相等的值返回 false
除非比較函式總是為相等的值返回 false,否則將會打破所有的標準關聯容器, 不管關聯容器是否允許存在副本(set、map、multiset、multimap) 對於(set、map)使用 less_equal (<=): 1 !( 10A <= 10B ) &a
Effective_STL 學習筆記(二十二) 避免原地修改 set 和 multiset 的健
情況下 刪除元素 一份 pre rpo cast set、map class color 正如所有標準關聯容器,set 和 multiset 保持它們的元素有序,容器的正確行為依賴於它們保持有序,如果改變一個元素的值,新值不在正確的位置,將破壞容器的有序性。 對於
Effective_STL 學習筆記(二十六) 儘量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator
每個標準容器類都提供四種迭代器型別,對於container<T>而言: 1 iterator // 的作用相當於T*, 2 const_iterator // 相當於 const T*(也可 T const*) 3
Effective_STL 學習筆記(二十七) 用 distance 和 advance 把 const_iterator 轉化成 iterator
並不存在從 const_iterator 到 iterator 之間的隱式轉換 一種安全的、可移植的方法獲取他所對應的 iterator: 1 typedef deque<int> IntDeque; // 方便的typedef 2 typedef Int
Effective_STL 學習筆記(二十八) 瞭解如何通過 reverse_iterator 的 base 得到 iterator
要實現在一個 reverse_iterator ri 指出的位置上插入新元素,在 ri.base() 指向的位置插入就行了。對於 insert 操作而言,ri 和 ri.base() 是等價的,而且 ri.base() 真的是 ri 真的是 ri 對應的iterator 1 vec
統計學習精要(The Elements of Statistical Learning)課堂筆記(二十三):原型方法和最近鄰KNN
筆記(二十二)需要等我找到上一本筆記本再說,暫時不知道扔到哪裡去了...汗。屆時補上。 這一章主要是講的原型方法(prototype)和最近鄰(KNN)。相對而言直覺更強,公式沒那麼複雜。 --------------------------筆記開始---------