CRBMultiMap – třída
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