共用方式為


CRBMultiMap 類別

這個類別代表一個對應結構,允許每個索引鍵都可以使用 Red-Black 二進位樹狀結構,與多個值相關聯。

語法

template<typename K,
         typename V,
         class KTraits = CElementTraits<K>,
         class VTraits = CElementTraits<V>>
class CRBMultiMap : public CRBTree<K, V, KTraits, VTraits>

參數

K
索引鍵專案類型。

V
value 元素類型。

KTraits
用來複製或移動索引鍵元素的程式碼。 如需詳細資訊,請參閱 CElementTraits 類別

VTraits
用來複製或移動值元素的程式碼。

成員

公用建構函式

名稱 描述
CRBMultiMap::CRBMultiMap 建構函式。
CRBMultiMap::~CRBMultiMap 解構函式。

公用方法

名稱 描述
CRBMultiMap::FindFirstWithKey 呼叫這個方法,以尋找具有指定索引鍵之第一個專案的位置。
CRBMultiMap::GetNextValueWithKey 呼叫此方法以取得與指定索引鍵相關聯的值,並更新位置值。
CRBMultiMap::GetNextWithKey 呼叫此方法以取得與指定索引鍵相關聯的專案,並更新位置值。
CRBMultiMap::Insert 呼叫這個方法,將專案組插入對應中。
CRBMultiMap::RemoveKey 呼叫這個方法,以移除指定索引鍵的所有索引鍵/值專案。

備註

CRBMultiMap 支援任何指定類型的對應陣列,管理索引鍵元素和值的已排序陣列。 不同于 CRBMap 類別,每個索引鍵都可以與多個值相關聯。

元素(由索引鍵和值組成)會使用 CRBMultiMap::Insert 方法儲存在二進位樹狀結構中。 您可以使用 CRBMultiMap::RemoveKey 方法移除 元素,此方法會刪除符合指定索引鍵的所有元素。

使用 CRBTree::GetHeadPosition 、CRBTree::GetNext 和 CRBTree::GetNextValue 方法,即可周遊樹狀 結構。 您可以使用 CRBMultiMap::FindFirstWithKey、 CRBMultiMap::GetNextValueWithKey 和 CRBMultiMap::GetNextWithKey 方法來存取每個索引鍵的可能多個值。 如需實際操作說明,請參閱 CRBMultiMap::CRBMultiMap 的範例

KTraits VTraits 參數是特性類別,其中包含複製或移動元素所需的任何補充程式碼。

CRBMultiMap 衍生自 CRBTree ,它會使用 Red-Black 演算法實作二進位樹狀結構。 CAtlMap 類別提供 和 CRBMap 替代方案 CRBMultiMap 。 當只需要儲存少量元素時,請考慮改用 CSimpleMap 類別。

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

繼承階層架構

CRBTree

CRBMultiMap

需求

標頭: atlcoll.h

CRBMultiMap::CRBMultiMap

建構函式。

explicit CRBMultiMap(size_t nBlockSize = 10) throw();

參數

nBlockSize
區塊大小。

備註

nBlockSize 參數是需要新元素時所配置的記憶體數量量值。 較大的區塊大小可減少對記憶體配置常式的呼叫,但會使用更多資源。 預設值會一次配置 10 個專案的空間。

如需其他可用方法的相關資訊,請參閱基類 CRBTree 的檔。

範例

// Define a multimap object which has an integer
// key, a double value, and a block size of 5
CRBMultiMap<int, double> myMap(5);

// Add some key/values. Notice how three
// different values are associated with 
// one key. In a CRBMap object, the values
// would simply overwrite each other.
myMap.Insert(0, 1.1);
myMap.Insert(0, 1.2);
myMap.Insert(0, 1.3);
myMap.Insert(1, 2.1);

// Look up a key and iterate through
// all associated values

double v;
POSITION myPos = myMap.FindFirstWithKey(0);

while (myPos != NULL)
{
   v = myMap.GetNextValueWithKey(myPos,0);
   // As the loop iterates, v 
   // contains the values 1.3, 1.2, 1.1
}

// Remove all of the values associated with that key
size_t i = myMap.RemoveKey(0);

// Confirm all three values were deleted
ATLASSERT(i == 3);

CRBMultiMap::~CRBMultiMap

解構函式。

~CRBMultiMap() throw();

備註

釋放任何已配置的資源。

如需其他可用方法的相關資訊,請參閱基類 CRBTree 的檔。

CRBMultiMap::FindFirstWithKey

呼叫這個方法,以尋找具有指定索引鍵之第一個專案的位置。

POSITION FindFirstWithKey(KINARGTYPE key) const throw();

參數

key
指定識別要找到之專案的索引鍵。

傳回值

如果找到索引鍵,則傳回第一個索引鍵/值元素的 POSITION,否則傳回 Null。

備註

中的 CRBMultiMap 索引鍵可以有一或多個相關聯的值。 這個方法會提供第一個值的位置值(事實上,可能是與該特定索引鍵相關聯的唯一值)。 然後,傳回的位置值可以與 CRBMultiMap::GetNextValueWithKey CRBMultiMap::GetNextWithKey 搭配 使用,以取得值並更新位置。

如需其他可用方法的相關資訊,請參閱基類 CRBTree 的檔。

範例

請參閱 CRBMultiMap::CRBMultiMap 的範例

CRBMultiMap::GetNextValueWithKey

呼叫此方法以取得與指定索引鍵相關聯的值,並更新位置值。

const V& GetNextValueWithKey(
    POSITION& pos,
    KINARGTYPE key) const throw();
V& GetNextValueWithKey(
    POSITION& pos,
    KINARGTYPE key) throw();

參數

pos
以呼叫 CRBMultiMap::FindFirstWithKey 或 CRBMultiMap::GetNextWithKey 取得 的位置值,或先前對 GetNextValueWithKey 的呼叫。

key
指定識別要找到之專案的索引鍵。

傳回值

傳回與指定索引鍵相關聯的專案組。

備註

位置值會更新為指向與索引鍵相關聯的下一個值。 如果沒有其他值存在,則位置值會設定為 Null。

如需其他可用方法的相關資訊,請參閱基類 CRBTree 的檔。

範例

請參閱 CRBMultiMap::CRBMultiMap 的範例

CRBMultiMap::GetNextWithKey

呼叫此方法以取得與指定索引鍵相關聯的專案,並更新位置值。

const CPair* GetNextWithKey(
    POSITION& pos,
    KINARGTYPE key) const throw();
CPair* GetNextWithKey(
    POSITION& pos,
    KINARGTYPE key) throw();

參數

pos
以呼叫 CRBMultiMap::FindFirstWithKey 或 CRBMultiMap::GetNextValueWithKey 先前呼叫 GetNextWithKey 取得的位置值。

key
指定識別要找到之專案的索引鍵。

傳回值

傳回與指定索引鍵相關聯的下一個 CRBTree::CPair Class 元素。

備註

位置值會更新為指向與索引鍵相關聯的下一個值。 如果沒有其他值存在,則位置值會設定為 Null。

如需其他可用方法的相關資訊,請參閱基類 CRBTree 的檔。

CRBMultiMap::Insert

呼叫這個方法,將專案組插入對應中。

POSITION Insert(KINARGTYPE key, VINARGTYPE value) throw(...);

參數

key
要加入至 CRBMultiMap 物件的索引鍵值。

value
要加入至 物件的值 CRBMultiMap ,與 索引鍵 相關聯。

傳回值

傳回 物件中 CRBMultiMap 索引鍵/值專案組的位置。

備註

如需其他可用方法的相關資訊,請參閱基類 CRBTree 的檔。

範例

請參閱 CRBMultiMap::CRBMultiMap 的範例

CRBMultiMap::RemoveKey

呼叫這個方法,以移除指定索引鍵的所有索引鍵/值專案。

size_t RemoveKey(KINARGTYPE key) throw();

參數

key
指定要刪除之專案的索引鍵。

傳回值

傳回與指定索引鍵相關聯的值數目。

備註

RemoveKey 會刪除索引鍵符合 索引 鍵的所有索引鍵/值專案。

如需其他可用方法的相關資訊,請參閱基類 CRBTree 的檔。

範例

請參閱 CRBMultiMap::CRBMultiMap 的範例

另請參閱

CRBTree 類別
CAtlMap 類別
CRBMap 類別
類別概觀