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 集合類別。
繼承階層架構
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的範例。