Freigeben über


CRBMultiMap-Klasse

Diese Klasse stellt eine Zuordnungsstruktur dar, mit der jeder Schlüssel mit mehr als einem Wert verknüpft werden kann, wobei eine Red-Black-Binärstruktur verwendet wird.

Syntax

template<typename K,
         typename V,
         class KTraits = CElementTraits<K>,
         class VTraits = CElementTraits<V>>
class CRBMultiMap : public CRBTree<K, V, KTraits, VTraits>

Parameter

K
Der Schlüsselelementtyp.

B
Der Wertelementtyp.

KTraits
Der Code zum Kopieren oder Verschieben von Schlüsselelementen. Weitere Details finden Sie unter CElementTraits Class .

VTraits
Der Code zum Kopieren oder Verschieben von Wertelementen.

Member

Öffentliche Konstruktoren

Name Beschreibung
CRBMultiMap::CRBMultiMap Der Konstruktor.
CRBMultiMap::~CRBMultiMap Der Destruktor.

Öffentliche Methoden

Name Beschreibung
CRBMultiMap::FindFirstWithKey Rufen Sie diese Methode auf, um die Position des ersten Elements mit einem bestimmten Schlüssel zu finden.
CRBMultiMap::GetNextValueWithKey Rufen Sie diese Methode auf, um den einem bestimmten Schlüssel zugeordneten Wert abzurufen und den Positionswert zu aktualisieren.
CRBMultiMap::GetNextWithKey Rufen Sie diese Methode auf, um das element abzurufen, das einem bestimmten Schlüssel zugeordnet ist, und aktualisieren Sie den Positionswert.
CRBMultiMap::Insert Rufen Sie diese Methode auf, um ein Elementpaar in die Karte einzufügen.
CRBMultiMap::RemoveKey Rufen Sie diese Methode auf, um alle Schlüssel-/Wertelemente für einen bestimmten Schlüssel zu entfernen.

Hinweise

CRBMultiMap bietet Unterstützung für ein Zuordnungsarray eines bestimmten Typs, wobei ein sortiertes Array von Schlüsselelementen und Werten verwaltet wird. Im Gegensatz zur CRBMap-Klasse kann jeder Schlüssel mehreren Werten zugeordnet werden.

Elemente (bestehend aus einem Schlüssel und einem Wert) werden mithilfe der CRBMultiMap::Insert-Methode in einer binären Struktur gespeichert. Elemente können mithilfe der CRBMultiMap::RemoveKey-Methode entfernt werden, die alle Elemente löscht, die dem angegebenen Schlüssel entsprechen.

Das Durchlaufen der Struktur wird mit Methoden wie CRBTree::GetHeadPosition, CRBTree::GetNext und CRBTree::GetNextValue ermöglicht. Der Zugriff auf potenziell mehrere Werte pro Schlüssel ist mithilfe der Methoden CRBMultiMap::FindFirstWithKey, CRBMultiMap::GetNextValueWithKey und CRBMultiMap::GetNextWithKey möglich. Ein Beispiel für CRBMultiMap::CRBMultiMap finden Sie in der Praxis.

Die Parameter "KTraits " und "VTraits " sind Eigenschaftenklassen, die zusätzlichen Code enthalten, der zum Kopieren oder Verschieben von Elementen erforderlich ist.

CRBMultiMap wird von CRBTree abgeleitet, das eine binäre Struktur mithilfe des Red-Black-Algorithmus implementiert. Eine Alternative zu CRBMultiMap und CRBMap wird von der CAtlMap-Klasse angeboten. Wenn nur eine kleine Anzahl von Elementen gespeichert werden muss, sollten Sie stattdessen die CSimpleMap-Klasse verwenden.

Eine ausführlichere Erläuterung der verschiedenen Sammlungsklassen und deren Features und Leistungsmerkmale finden Sie unter ATL-Sammlungsklassen.

Vererbungshierarchie

CRBTree

CRBMultiMap

Anforderungen

Kopfzeile: atlcoll.h

CRBMultiMap::CRBMultiMap

Der Konstruktor.

explicit CRBMultiMap(size_t nBlockSize = 10) throw();

Parameter

nBlockSize
Die Blockgröße.

Hinweise

Der nBlockSize-Parameter ist ein Maß für die Menge des Arbeitsspeichers, der zugewiesen wird, wenn ein neues Element erforderlich ist. Größere Blockgrößen reduzieren Aufrufe an Speicherzuweisungsroutinen, verwenden jedoch weitere Ressourcen. Standardmäßig wird jeweils Platz für 10 Elemente zugewiesen.

Informationen zu den anderen verfügbaren Methoden finden Sie in der Dokumentation zur Basisklasse CRBTree .

Beispiel

// 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

Der Destruktor.

~CRBMultiMap() throw();

Hinweise

Gibt alle zugeordneten Ressourcen frei.

Informationen zu den anderen verfügbaren Methoden finden Sie in der Dokumentation zur Basisklasse CRBTree .

CRBMultiMap::FindFirstWithKey

Rufen Sie diese Methode auf, um die Position des ersten Elements mit einem bestimmten Schlüssel zu finden.

POSITION FindFirstWithKey(KINARGTYPE key) const throw();

Parameter

key
Gibt den Schlüssel an, der das zu findende Element identifiziert.

Rückgabewert

Gibt die POSITION des ersten Schlüssel-/Wertelements zurück, wenn der Schlüssel gefunden wird, andernfalls NULL.

Hinweise

Ein Schlüssel in der CRBMultiMap Kann einen oder mehrere zugeordnete Werte aufweisen. Diese Methode stellt den Positionswert des ersten Werts bereit (der tatsächlich der einzige Wert sein kann), der diesem bestimmten Schlüssel zugeordnet ist. Der zurückgegebene Positionswert kann dann mit CRBMultiMap::GetNextValueWithKey oder CRBMultiMap::GetNextWithKey verwendet werden, um den Wert abzurufen und die Position zu aktualisieren.

Informationen zu den anderen verfügbaren Methoden finden Sie in der Dokumentation zur Basisklasse CRBTree .

Beispiel

Siehe beispiel für CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextValueWithKey

Rufen Sie diese Methode auf, um den einem bestimmten Schlüssel zugeordneten Wert abzurufen und den Positionswert zu aktualisieren.

const V& GetNextValueWithKey(
    POSITION& pos,
    KINARGTYPE key) const throw();
V& GetNextValueWithKey(
    POSITION& pos,
    KINARGTYPE key) throw();

Parameter

pos
Der Positionswert, der mit einem Aufruf von CRBMultiMap::FindFirstWithKey oder CRBMultiMap::GetNextWithKey oder einem vorherigen Aufruf von GetNextValueWithKey.

key
Gibt den Schlüssel an, der das zu findende Element identifiziert.

Rückgabewert

Gibt das Elementpaar zurück, das dem angegebenen Schlüssel zugeordnet ist.

Hinweise

Der Positionswert wird aktualisiert, um auf den nächsten Wert zu verweisen, der dem Schlüssel zugeordnet ist. Wenn keine weiteren Werte vorhanden sind, wird der Positionswert auf NULL festgelegt.

Informationen zu den anderen verfügbaren Methoden finden Sie in der Dokumentation zur Basisklasse CRBTree .

Beispiel

Siehe beispiel für CRBMultiMap::CRBMultiMap.

CRBMultiMap::GetNextWithKey

Rufen Sie diese Methode auf, um das element abzurufen, das einem bestimmten Schlüssel zugeordnet ist, und aktualisieren Sie den Positionswert.

const CPair* GetNextWithKey(
    POSITION& pos,
    KINARGTYPE key) const throw();
CPair* GetNextWithKey(
    POSITION& pos,
    KINARGTYPE key) throw();

Parameter

pos
Der Positionswert, der mit einem Aufruf von CRBMultiMap::FindFirstWithKey oder CRBMultiMap::GetNextValueWithKey oder einem vorherigen Aufruf von GetNextWithKey.

key
Gibt den Schlüssel an, der das zu findende Element identifiziert.

Rückgabewert

Gibt das nächste CRBTree::CPair Class-Element zurück, das dem angegebenen Schlüssel zugeordnet ist.

Hinweise

Der Positionswert wird aktualisiert, um auf den nächsten Wert zu verweisen, der dem Schlüssel zugeordnet ist. Wenn keine weiteren Werte vorhanden sind, wird der Positionswert auf NULL festgelegt.

Informationen zu den anderen verfügbaren Methoden finden Sie in der Dokumentation zur Basisklasse CRBTree .

CRBMultiMap::Insert

Rufen Sie diese Methode auf, um ein Elementpaar in die Karte einzufügen.

POSITION Insert(KINARGTYPE key, VINARGTYPE value) throw(...);

Parameter

key
Der Schlüsselwert, der dem CRBMultiMap Objekt hinzugefügt werden soll.

value
Der Wert, der dem CRBMultiMap Objekt hinzugefügt werden soll, das dem Schlüssel zugeordnet ist.

Rückgabewert

Gibt die Position des Schlüssel-Wert-Elementpaars im CRBMultiMap Objekt zurück.

Hinweise

Informationen zu den anderen verfügbaren Methoden finden Sie in der Dokumentation zur Basisklasse CRBTree .

Beispiel

Siehe beispiel für CRBMultiMap::CRBMultiMap.

CRBMultiMap::RemoveKey

Rufen Sie diese Methode auf, um alle Schlüssel-/Wertelemente für einen bestimmten Schlüssel zu entfernen.

size_t RemoveKey(KINARGTYPE key) throw();

Parameter

key
Gibt den Schlüssel an, der die zu löschenden Elemente identifiziert.

Rückgabewert

Gibt die Anzahl der Werte zurück, die dem angegebenen Schlüssel zugeordnet sind.

Hinweise

RemoveKeylöscht alle Schlüssel-/Wertelemente, die über einen Schlüssel verfügen, der mit dem Schlüssel übereinstimmt.

Informationen zu den anderen verfügbaren Methoden finden Sie in der Dokumentation zur Basisklasse CRBTree .

Beispiel

Siehe beispiel für CRBMultiMap::CRBMultiMap.

Siehe auch

CRBTree-Klasse
CAtlMap-Klasse
CRBMap-Klasse
Klassenübersicht