共用方式為


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 樹狀結構是二進位搜尋樹狀結構,其會使用每個節點額外一點的資訊,以確保其保持「平衡」,也就是說,樹狀結構高度不會不成比例地成長,而且會影響效能。

此範本類別的設計目的是要供 CRBMapCRBMultiMap使用。 組成這些衍生類別的大部分方法是由 CRBTree提供。

如需各種集合類別及其特性和效能特性的更完整討論,請參閱 ATL 集合類別

需求

標頭: atlcoll.h

CRBTree::CPair 類別

類別,包含索引鍵和值專案。

class CPair : public __POSITION

備註

CRBTree::GetAtCRBTree::GetNextCRBTree::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::GetKeyAtCRBTree::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::GetHeadPositionCRBTree::FindFirstKeyAfter 等方法所傳回。

傳回值

傳回樹狀結構中下一個 CPair 值的指標。

備註

每次呼叫之後都會更新 pos 位置計數器。 如果擷取的專案是樹狀結構中的最後一個專案, pos 會設定為 NULL。

CRBTree::GetNextAssoc

呼叫這個方法,以取得儲存在對應中之專案的索引鍵和值,並將位置前進到下一個專案。

void GetNextAssoc(
    POSITION& pos,
    KOUTARGTYPE key,
    VOUTARGTYPE value) const;

參數

pos
位置計數器,由先前呼叫 CRBTree::GetHeadPositionCRBTree::FindFirstKeyAfter 等方法所傳回。

key
指定樹狀目錄索引鍵類型的範本參數。

value
指定樹狀結構值的型別的樣板參數。

備註

每次呼叫之後都會更新 pos 位置計數器。 如果擷取的專案是樹狀結構中的最後一個專案, pos 會設定為 NULL。

CRBTree::GetNextKey

呼叫此方法以取得儲存在樹狀結構中的元素索引鍵,並將位置前進到下一個專案。

const K& GetNextKey(POSITION& pos) const throw();

參數

pos
位置計數器,由先前呼叫 CRBTree::GetHeadPositionCRBTree::FindFirstKeyAfter 等方法所傳回。

傳回值

傳回樹狀結構中下一個索引鍵的參考。

備註

更新目前的位置計數器 pos。如果樹狀結構中沒有其他專案,則位置計數器會設定為NULL。

CRBTree::GetNextValue

呼叫這個方法,以取得儲存在樹狀結構中的專案值,並將位置前進到下一個專案。

const V& GetNextValue(POSITION& pos) const throw();
V& GetNextValue(POSITION& pos) throw();

參數

pos
位置計數器,由先前呼叫 CRBTree::GetHeadPositionCRBTree::FindFirstKeyAfter 等方法所傳回。

傳回值

傳回樹狀結構中下一個值的參考。

備註

更新目前的位置計數器 pos。如果樹狀結構中沒有其他專案,則位置計數器會設定為NULL。

CRBTree::GetPrev

呼叫這個方法以取得儲存在 物件中 CRBTree 之專案的指標,然後將位置更新為上一個專案。

const CPair* GetPrev(POSITION& pos) const throw();
CPair* GetPrev(POSITION& pos) throw();

參數

pos
位置計數器,由先前呼叫 CRBTree::GetHeadPositionCRBTree::FindFirstKeyAfter 等方法所傳回。

傳回值

傳回儲存在樹狀結構中的上 一個 CPair 值的指標。

備註

更新目前的位置計數器 pos。如果樹狀結構中沒有其他專案,則位置計數器會設定為NULL。

CRBTree::GetTailPosition

呼叫這個方法,以取得樹狀結構尾端元素的位置值。

POSITION GetTailPosition() const throw();

傳回值

傳回樹狀結構尾端元素的位置值。

備註

GetTailPosition回的值可以與CRBTree::GetKeyAtCRBTree::GetPrev等方法搭配使用,以周游樹狀結構並擷取值。

CRBTree::GetValueAt

呼叫這個方法,以擷取儲存在物件中指定位置的值 CRBTree

const V& GetValueAt(POSITION pos) const throw();
V& GetValueAt(POSITION pos) throw();

參數

pos
位置計數器,由先前呼叫 CRBTree::GetHeadPositionCRBTree::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::GetHeadPositionCRBTree::FindFirstKeyAfter 等方法所傳回。

備註

拿掉儲存在指定位置的索引鍵/值組。 用來儲存專案的記憶體會釋出。 pos參考的 POSITION 會變成無效,而樹狀結構中任何其他元素的 POSITION 仍然有效時,它們不一定會保留相同的順序。

CRBTree::SetValueAt

呼叫這個方法,以變更儲存在 物件中指定位置的值 CRBTree

void SetValueAt(POSITION pos, VINARGTYPE value);

參數

pos
位置計數器,由先前呼叫 CRBTree::GetHeadPositionCRBTree::FindFirstKeyAfter 等方法所傳回。

value
要加入至 CRBTree 物件的值。

備註

變更儲存在物件中指定位置的值 CRBTree 專案。

CRBTree::VINARGTYPE

當值當做輸入自變數傳遞時所使用的類型。

typedef VTraits::INARGTYPE VINARGTYPE;

CRBTree::VOUTARGTYPE

當值當做輸出自變數傳遞時所使用的類型。

typedef VTraits::OUTARGTYPE VOUTARGTYPE;

另請參閱

類別概觀