文件位於 llvm/include/llvm/[[ADT]]/DenseSet.h學習
文件註釋:Dense probed hash table -- 密集探測哈希表?this
Dense: 密集的,密度大的。code
文件中定義的類是 [[DenseSet]]hash
== DenseSet 類概要 ==
因爲前面在學習 SmallPtrSet 的時候已經接觸過 llvm 中 DenseXXX 的相關概念了,因此咱們相信 DenseSet 這裏不難理解。it
template <V, VI> // 注1 class DenseSet { DenseMap<V,char,...> TheMap; // 注2: 內部實際使用 Map 實現 Set。 this() // 複製構造等構造形式。 empty(),size(),count(),clear() 等標準容器方法。 iterator, const_iterator 類定義及 begin(), end() 等迭代器獲取方法。 // 迭代器實質上是 DenseMap 實現的迭代器的簡單封裝。 find(),erase(),insert() 等容器方法。 }
* 注1: 模板參數 VI 指 DenseMapInfo<V>,在研究 DenseMap<> 的時候咱們再仔細看吧。
* 注2: 內部使用 [[DenseMap]], 使用鍵類型爲 V, 值類型爲 char。實質上仍是浪費了空間的。但這樣彷佛不要求 V 實現有特殊的 empty,tombstone 標記值?也許應該有更好的辦法?
* iterator 內部偷懶只實現了 ++() 前綴遞增,沒有實現 ++(int) 後綴遞增。
* 因爲 DenseSet 內部使用 [[DenseMap]],因此須要稍後研究 DenseMap 的時候再弄清楚了。
table