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
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
RemoveKey
lö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