1. 程式人生 > >Effective_STL 學習筆記(二十三) 考慮用有序 vector 代替關聯容器

Effective_STL 學習筆記(二十三) 考慮用有序 vector 代替關聯容器

 

標準關聯容器的典型實現是平衡二叉查詢樹,

一個平衡二叉查詢樹是一個對插入、刪除和查詢的混合操作優化的資料結構

1. 建立。通過插入很多元素建立一個新的資料結構

2. 查詢。在資料結構中查詢指定的資訊片。

3. 重組。修改資料結構的內容,也許通過刪除所有現有資料和在原地插入新資料。

 

有時,一個 vector 可能比一個關聯容器能提供更高的效能(時間和空間),

通過有序 vector 使用查詢演算法—— binary_search、lower_bound、equal_range等

對於為什麼一個有序的 vector 的二分查詢比一個二叉樹的二分查詢效能更好:

1. 大小問題

2. 引用區域性性問題

概要:在有序 vector 中儲存資料很可能比在標準關聯容器中儲存相同的資料消耗更少的記憶體;當頁面錯誤值得重視的時候,在有序 vector 中通過二分查詢可能比在一個標準關聯容器中查詢更快。

有序 vector 的最大缺點是它必須保持有序!當新元素插入時,大於這個新元素的所有東西都必須向上移動一位,如果重新分配記憶體,則更加昂貴,所以只有你知道你的資料結構使用的時候查詢幾乎不和插入和刪除混合時,使用有序 vector 代替關聯容器才有意義。