CRBMultiMap – třída

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

CRBTree

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