CRBTree 類別
這個類別提供建立和使用紅黑樹的方法。
語法
template <typename K,
typename V,
class KTraits = CElementTraits<K>,
class VTraits = CElementTraits<V>>
class CRBTree
參數
K
索引鍵項目類型。
V
value 元素類型。
KTraits
用來複製或移動索引鍵元素的程序代碼。 如需詳細資訊,請參閱 CElementTraits 類別 。
VTraits
用來複製或移動值元素的程序代碼。
成員
公用 Typedefs
名稱 | 描述 |
---|---|
CRBTree::KINARGTYPE | 當金鑰傳遞為輸入自變數時所使用的類型。 |
CRBTree::KOUTARGTYPE | 當索引鍵當做輸出自變數傳回時所使用的類型。 |
CRBTree::VINARGTYPE | 當值當做輸入自變數傳遞時所使用的類型。 |
CRBTree::VOUTARGTYPE | 當值當做輸出自變數傳遞時所使用的類型。 |
公用類別
名稱 | 描述 |
---|---|
CRBTree::CPair 類別 | 類別,包含索引鍵和值專案。 |
公用建構函式
名稱 | 描述 |
---|---|
CRBTree::~CRBTree | 解構函式。 |
公用方法
名稱 | 描述 |
---|---|
CRBTree::FindFirstKeyAfter | 呼叫這個方法,以尋找使用下一個可用索引鍵的專案位置。 |
CRBTree::GetAt | 呼叫這個方法,以取得位於樹狀結構中指定位置的專案。 |
CRBTree::GetCount | 呼叫此方法以取得樹狀結構中的項目數目。 |
CRBTree::GetHeadPosition | 呼叫這個方法,以取得樹狀結構前端的專案位置值。 |
CRBTree::GetKeyAt | 呼叫這個方法,從樹狀目錄中的指定位置取得索引鍵。 |
CRBTree::GetNext | 呼叫這個方法以取得儲存在 物件中的 CRBTree 元素指標,並將位置往前移至下一個專案。 |
CRBTree::GetNextAssoc | 呼叫這個方法,以取得儲存在對應中之專案的索引鍵和值,並將位置前進到下一個專案。 |
CRBTree::GetNextKey | 呼叫此方法以取得儲存在樹狀結構中的元素索引鍵,並將位置前進到下一個專案。 |
CRBTree::GetNextValue | 呼叫這個方法,以取得儲存在樹狀結構中的專案值,並將位置前進到下一個專案。 |
CRBTree::GetPrev | 呼叫這個方法以取得儲存在 物件中 CRBTree 之專案的指標,然後將位置更新為上一個專案。 |
CRBTree::GetTailPosition | 呼叫這個方法,以取得樹狀結構尾端元素的位置值。 |
CRBTree::GetValueAt | 呼叫這個方法,以擷取儲存在物件中指定位置的值 CRBTree 。 |
CRBTree::IsEmpty | 呼叫此方法以測試空的樹狀結構物件。 |
CRBTree::RemoveAll | 呼叫這個方法,以移除 CRBTree 物件中的所有專案。 |
CRBTree::RemoveAt | 呼叫這個方法,以移除物件中指定位置的專案 CRBTree 。 |
CRBTree::SetValueAt | 呼叫這個方法,以變更儲存在 物件中指定位置的值 CRBTree 。 |
備註
Red-Black 樹狀結構是二進位搜尋樹狀結構,其會使用每個節點額外一點的資訊,以確保其保持「平衡」,也就是說,樹狀結構高度不會不成比例地成長,而且會影響效能。
此範本類別的設計目的是要供 CRBMap 和 CRBMultiMap使用。 組成這些衍生類別的大部分方法是由 CRBTree
提供。
如需各種集合類別及其特性和效能特性的更完整討論,請參閱 ATL 集合類別。
需求
標頭: atlcoll.h
CRBTree::CPair 類別
類別,包含索引鍵和值專案。
class CPair : public __POSITION
備註
CRBTree::GetAt、CRBTree::GetNext 和 CRBTree::GetPrev 方法會使用此類別來存取儲存在樹狀結構中的索引鍵和值元素。
成員如下所示:
數據成員 | 描述 |
---|---|
m_key |
儲存索引鍵元素的數據成員。 |
m_value |
儲存 value 元素的數據成員。 |
CRBTree::~CRBTree
解構函式。
~CRBTree() throw();
備註
釋放任何已配置的資源。 呼叫 CRBTree::RemoveAll 以刪除所有元素。
CRBTree::FindFirstKeyAfter
呼叫這個方法,以尋找使用下一個可用索引鍵的專案位置。
POSITION FindFirstKeyAfter(KINARGTYPE key) const throw();
參數
key
索引鍵值。
傳回值
傳回使用下一個可用索引鍵之專案的位置值。 如果沒有其他專案,則會傳回NULL。
備註
此方法可讓您輕鬆地周游樹狀結構,而不需要事先計算位置值。
CRBTree::GetAt
呼叫這個方法,以取得位於樹狀結構中指定位置的專案。
CPair* GetAt(POSITION pos) throw();
const CPair* GetAt(POSITION pos) const throw();
void GetAt(POSITION pos, KOUTARGTYPE key, VOUTARGTYPE value) const;
參數
pos
位置值。
key
接收金鑰的變數。
value
接收值的變數。
傳回值
前兩個窗體會傳回 CPair 的指標。 第三個窗體會取得指定位置的索引鍵和值。
備註
位置值先前可以使用呼叫 CRBTree::GetHeadPosition 或 CRBTree::GetTailPosition 等方法來判斷。
在偵錯組建中,如果 pos 等於 NULL,就會發生判斷提示失敗。
CRBTree::GetCount
呼叫此方法以取得樹狀結構中的項目數目。
size_t GetCount() const throw();
傳回值
傳回儲存在樹狀結構中的項目數(每個索引鍵/值組是一個元素)。
CRBTree::GetHeadPosition
呼叫這個方法,以取得樹狀結構前端的專案位置值。
POSITION GetHeadPosition() const throw();
傳回值
傳回樹狀結構前端的專案位置值。
備註
傳GetHeadPosition
回的值可以搭配CRBTree::GetKeyAt或CRBTree::GetNext等方法來周游樹狀結構並擷取值。
CRBTree::GetKeyAt
呼叫這個方法,從樹狀目錄中的指定位置取得索引鍵。
const K& GetKeyAt(POSITION pos) const throw();
參數
pos
位置值。
傳回值
傳回儲存在樹狀結構中位置 位置位置的 索引鍵。
備註
如果 pos 不是有效的位置值,則結果無法預測。 在偵錯組建中,如果 pos 等於 NULL,就會發生判斷提示失敗。
CRBTree::GetNext
呼叫這個方法以取得儲存在 物件中的 CRBTree
元素指標,並將位置往前移至下一個專案。
const CPair* GetNext(POSITION& pos) const throw();
CPair* GetNext(POSITION& pos) throw();
參數
pos
位置計數器,由先前呼叫 CRBTree::GetHeadPosition 或 CRBTree::FindFirstKeyAfter 等方法所傳回。
傳回值
傳回樹狀結構中下一個 CPair 值的指標。
備註
每次呼叫之後都會更新 pos 位置計數器。 如果擷取的專案是樹狀結構中的最後一個專案, pos 會設定為 NULL。
CRBTree::GetNextAssoc
呼叫這個方法,以取得儲存在對應中之專案的索引鍵和值,並將位置前進到下一個專案。
void GetNextAssoc(
POSITION& pos,
KOUTARGTYPE key,
VOUTARGTYPE value) const;
參數
pos
位置計數器,由先前呼叫 CRBTree::GetHeadPosition 或 CRBTree::FindFirstKeyAfter 等方法所傳回。
key
指定樹狀目錄索引鍵類型的範本參數。
value
指定樹狀結構值的型別的樣板參數。
備註
每次呼叫之後都會更新 pos 位置計數器。 如果擷取的專案是樹狀結構中的最後一個專案, pos 會設定為 NULL。
CRBTree::GetNextKey
呼叫此方法以取得儲存在樹狀結構中的元素索引鍵,並將位置前進到下一個專案。
const K& GetNextKey(POSITION& pos) const throw();
參數
pos
位置計數器,由先前呼叫 CRBTree::GetHeadPosition 或 CRBTree::FindFirstKeyAfter 等方法所傳回。
傳回值
傳回樹狀結構中下一個索引鍵的參考。
備註
更新目前的位置計數器 pos。如果樹狀結構中沒有其他專案,則位置計數器會設定為NULL。
CRBTree::GetNextValue
呼叫這個方法,以取得儲存在樹狀結構中的專案值,並將位置前進到下一個專案。
const V& GetNextValue(POSITION& pos) const throw();
V& GetNextValue(POSITION& pos) throw();
參數
pos
位置計數器,由先前呼叫 CRBTree::GetHeadPosition 或 CRBTree::FindFirstKeyAfter 等方法所傳回。
傳回值
傳回樹狀結構中下一個值的參考。
備註
更新目前的位置計數器 pos。如果樹狀結構中沒有其他專案,則位置計數器會設定為NULL。
CRBTree::GetPrev
呼叫這個方法以取得儲存在 物件中 CRBTree
之專案的指標,然後將位置更新為上一個專案。
const CPair* GetPrev(POSITION& pos) const throw();
CPair* GetPrev(POSITION& pos) throw();
參數
pos
位置計數器,由先前呼叫 CRBTree::GetHeadPosition 或 CRBTree::FindFirstKeyAfter 等方法所傳回。
傳回值
傳回儲存在樹狀結構中的上 一個 CPair 值的指標。
備註
更新目前的位置計數器 pos。如果樹狀結構中沒有其他專案,則位置計數器會設定為NULL。
CRBTree::GetTailPosition
呼叫這個方法,以取得樹狀結構尾端元素的位置值。
POSITION GetTailPosition() const throw();
傳回值
傳回樹狀結構尾端元素的位置值。
備註
傳GetTailPosition
回的值可以與CRBTree::GetKeyAt或CRBTree::GetPrev等方法搭配使用,以周游樹狀結構並擷取值。
CRBTree::GetValueAt
呼叫這個方法,以擷取儲存在物件中指定位置的值 CRBTree
。
const V& GetValueAt(POSITION pos) const throw();
V& GetValueAt(POSITION pos) throw();
參數
pos
位置計數器,由先前呼叫 CRBTree::GetHeadPosition 或 CRBTree::FindFirstKeyAfter 等方法所傳回。
傳回值
傳回物件中指定位置 CRBTree
所儲存值的參考。
CRBTree::IsEmpty
呼叫此方法以測試空的樹狀結構物件。
bool IsEmpty() const throw();
傳回值
如果樹狀結構是空的,則傳回 TRUE,否則傳回 FALSE。
CRBTree::KINARGTYPE
當金鑰傳遞為輸入自變數時所使用的類型。
typedef KTraits::INARGTYPE KINARGTYPE;
CRBTree::KOUTARGTYPE
當索引鍵當做輸出自變數傳回時所使用的類型。
typedef KTraits::OUTARGTYPE KOUTARGTYPE;
CRBTree::RemoveAll
呼叫這個方法,以移除 CRBTree
物件中的所有專案。
void RemoveAll() throw();
備註
CRBTree
清除 物件,釋放用來儲存元素的記憶體。
CRBTree::RemoveAt
呼叫這個方法,以移除物件中指定位置的專案 CRBTree
。
void RemoveAt(POSITION pos) throw();
參數
pos
位置計數器,由先前呼叫 CRBTree::GetHeadPosition 或 CRBTree::FindFirstKeyAfter 等方法所傳回。
備註
拿掉儲存在指定位置的索引鍵/值組。 用來儲存專案的記憶體會釋出。 pos 所參考的 POSITION 會變成無效,而樹狀結構中任何其他元素的 POSITION 仍然有效時,它們不一定會保留相同的順序。
CRBTree::SetValueAt
呼叫這個方法,以變更儲存在 物件中指定位置的值 CRBTree
。
void SetValueAt(POSITION pos, VINARGTYPE value);
參數
pos
位置計數器,由先前呼叫 CRBTree::GetHeadPosition 或 CRBTree::FindFirstKeyAfter 等方法所傳回。
value
要加入至 CRBTree
物件的值。
備註
變更儲存在物件中指定位置的值 CRBTree
專案。
CRBTree::VINARGTYPE
當值當做輸入自變數傳遞時所使用的類型。
typedef VTraits::INARGTYPE VINARGTYPE;
CRBTree::VOUTARGTYPE
當值當做輸出自變數傳遞時所使用的類型。
typedef VTraits::OUTARGTYPE VOUTARGTYPE;