Sdílet prostřednictvím


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

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