Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Knihovna ATL (Active Template Library) se nadále podporuje. Už ale nepřidáme funkce ani aktualizujeme dokumentaci.
Tato třída představuje mapovací strukturu, která umožňuje každému klíči přiřadit více než jednu hodnotu pomocí binárního stromu Red-Black.
Syntaxe
template<typename K,
typename V,
class KTraits = CElementTraits<K>,
class VTraits = CElementTraits<V>>
class CRBMultiMap : public CRBTree<K, V, KTraits, VTraits>
Parametry
K
Typ klíčového prvku.
V
Typ prvku value.
KTraits
Kód použitý ke zkopírování nebo přesunutí klíčových prvků. Další podrobnosti najdete v tématu CElementTraits – třída .
VTraits
Kód použitý ke zkopírování nebo přesunutí hodnotových prvků.
Členové
Veřejné konstruktory
| Název | Popis |
|---|---|
| CRBMultiMap::CRBMultiMap | Konstruktor |
| CRBMultiMap::~CRBMultiMap | Destruktor. |
Veřejné metody
| Název | Popis |
|---|---|
| CRBMultiMap::FindFirstWithKey | Voláním této metody zjistíte pozici prvního prvku s daným klíčem. |
| CRBMultiMap::GetNextValueWithKey | Voláním této metody získáte hodnotu přidruženou k danému klíči a aktualizujte hodnotu pozice. |
| CRBMultiMap::GetNextWithKey | Voláním této metody získáte prvek přidružený k danému klíči a aktualizujte hodnotu pozice. |
| CRBMultiMap::Insert | Voláním této metody vložíte do mapy dvojici prvků. |
| CRBMultiMap::RemoveKey | Voláním této metody odeberete všechny prvky klíče/hodnoty pro daný klíč. |
Poznámky
CRBMultiMap poskytuje podporu pro mapování pole libovolného daného typu, správu uspořádaného pole klíčových prvků a hodnot.
Na rozdíl od třídy CRBMap může být každý klíč přidružen k více než jedné hodnotě.
Elementy (sestávající z klíče a hodnoty) jsou uloženy v binární stromové struktuře pomocí CRBMultiMap::Insert metoda. Elementy lze odebrat pomocí CRBMultiMap::RemoveKey metoda, která odstraní všechny prvky, které odpovídají danému klíči.
Procházení stromu je možné pomocí metod, jako je CRBTree::GetHeadPosition, CRBTree::GetNext a CRBTree::GetNextValue. Přístup k potenciálně více hodnotám na klíč je možný pomocí metod CRBMultiMap::FindFirstWithKey, CRBMultiMap::GetNextValueWithKey a CRBMultiMap::GetNextWithKey metody. Příklad pro CRBMultiMap::CRBMultiMap pro ilustraci tohoto příkladu v praxi.
Parametry KTraits a VTraits jsou třídy vlastností, které obsahují jakýkoli doplňkový kód potřebný ke kopírování nebo přesouvání prvků.
CRBMultiMap je odvozen z CRBTree, který implementuje binární strom pomocí algoritmu Red-Black. Alternativu k CRBMultiMap A CRBMap je nabízena CAtlMap třídy. Pokud je potřeba uložit pouze malý počet prvků, zvažte místo toho použití CSimpleMap třídy.
Podrobnější informace o různých třídách kolekcí a jejich funkcích a charakteristikách výkonu najdete v tématu Třídy kolekcí ATL.
Hierarchie dědičnosti
CRBMultiMap
Požadavky
Hlavička: atlcoll.h
CRBMultiMap::CRBMultiMap
Konstruktor
explicit CRBMultiMap(size_t nBlockSize = 10) throw();
Parametry
nBlockSize
Velikost bloku.
Poznámky
NBlockSize parametr je míra množství paměti přidělené v případě, že je požadován nový prvek. Větší velikosti bloků snižují počet volání rutin přidělení paměti, ale využívají více prostředků. Výchozí hodnota přidělí prostor pro 10 prvků najednou.
Informace o dalších dostupných metodách najdete v dokumentaci pro základní třídu CRBTree .
Příklad
// 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
Destruktor.
~CRBMultiMap() throw();
Poznámky
Uvolní všechny přidělené prostředky.
Informace o dalších dostupných metodách najdete v dokumentaci pro základní třídu CRBTree .
CRBMultiMap::FindFirstWithKey
Voláním této metody zjistíte pozici prvního prvku s daným klíčem.
POSITION FindFirstWithKey(KINARGTYPE key) const throw();
Parametry
key
Určuje klíč, který identifikuje prvek, který se má najít.
Návratová hodnota
Vrátí pozici prvního prvku klíč/hodnota, pokud je klíč nalezen, null jinak.
Poznámky
Klíč v klíči CRBMultiMap může mít jednu nebo více přidružených hodnot. Tato metoda poskytne hodnotu pozice první hodnoty (což může být ve skutečnosti jediná hodnota) přidružená k tomuto konkrétnímu klíči. Vrácená hodnota pozice se pak dá použít s CRBMultiMap::GetNextValueWithKey nebo CRBMultiMap::GetNextWithKey k získání hodnoty a aktualizaci pozice.
Informace o dalších dostupných metodách najdete v dokumentaci pro základní třídu CRBTree .
Příklad
Podívejte se na příklad pro CRBMultiMap::CRBMultiMap.
CRBMultiMap::GetNextValueWithKey
Voláním této metody získáte hodnotu přidruženou k danému klíči a aktualizujte hodnotu pozice.
const V& GetNextValueWithKey(
POSITION& pos,
KINARGTYPE key) const throw();
V& GetNextValueWithKey(
POSITION& pos,
KINARGTYPE key) throw();
Parametry
Pos
Hodnota pozice získaná voláním CRBMultiMap::FindFirstWithKey nebo CRBMultiMap::GetNextWithKey nebo předchozím voláním GetNextValueWithKey.
key
Určuje klíč, který identifikuje prvek, který se má najít.
Návratová hodnota
Vrátí dvojici prvků přidruženou k danému klíči.
Poznámky
Hodnota pozice se aktualizuje tak, aby odkazovat na další hodnotu přidruženou ke klíči. Pokud neexistují žádné další hodnoty, hodnota pozice je nastavena na HODNOTU NULL.
Informace o dalších dostupných metodách najdete v dokumentaci pro základní třídu CRBTree .
Příklad
Podívejte se na příklad pro CRBMultiMap::CRBMultiMap.
CRBMultiMap::GetNextWithKey
Voláním této metody získáte prvek přidružený k danému klíči a aktualizujte hodnotu pozice.
const CPair* GetNextWithKey(
POSITION& pos,
KINARGTYPE key) const throw();
CPair* GetNextWithKey(
POSITION& pos,
KINARGTYPE key) throw();
Parametry
Pos
Hodnota pozice získaná voláním CRBMultiMap::FindFirstWithKey nebo CRBMultiMap::GetNextValueWithKey nebo předchozím voláním GetNextWithKey.
key
Určuje klíč, který identifikuje prvek, který se má najít.
Návratová hodnota
Vrátí další prvek třídy CRBTree::CPair přidružený k danému klíči.
Poznámky
Hodnota pozice se aktualizuje tak, aby odkazovat na další hodnotu přidruženou ke klíči. Pokud neexistují žádné další hodnoty, hodnota pozice je nastavena na HODNOTU NULL.
Informace o dalších dostupných metodách najdete v dokumentaci pro základní třídu CRBTree .
CRBMultiMap::Insert
Voláním této metody vložíte do mapy dvojici prvků.
POSITION Insert(KINARGTYPE key, VINARGTYPE value) throw(...);
Parametry
key
Hodnota klíče, kterou chcete přidat k objektu CRBMultiMap .
value
Hodnota, která se má přidat k objektu CRBMultiMap přidruženému ke klíči.
Návratová hodnota
Vrátí pozici dvojice elementů klíč/hodnota v objektu CRBMultiMap .
Poznámky
Informace o dalších dostupných metodách najdete v dokumentaci pro základní třídu CRBTree .
Příklad
Podívejte se na příklad pro CRBMultiMap::CRBMultiMap.
CRBMultiMap::RemoveKey
Voláním této metody odeberete všechny prvky klíče/hodnoty pro daný klíč.
size_t RemoveKey(KINARGTYPE key) throw();
Parametry
key
Určuje klíč, který identifikuje prvky, které se mají odstranit.
Návratová hodnota
Vrátí počet hodnot přidružených k danému klíči.
Poznámky
RemoveKey odstraní všechny prvky klíče/hodnoty, které mají klíč, který odpovídá klíči.
Informace o dalších dostupných metodách najdete v dokumentaci pro základní třídu CRBTree .
Příklad
Podívejte se na příklad pro CRBMultiMap::CRBMultiMap.
Viz také
CRBTree – třída
CAtlMap – třída
CRBMap – třída
Přehled třídy