hash_multimap-Klasse
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Die Containerklasse „hash_multimap“ ist eine Erweiterung der C++-Standardbibliothek und wird für das Speichern und schnelle Abrufen von Daten aus einer Auflistung verwendet, in der jedes Element ein Paar mit einem Sortierschlüssel, dessen Wert nicht eindeutig sein muss und einem zugeordneten Datenwert ist.
Syntax
template <class Key,
class Type,
class Traits=hash_compare <Key, less <Key>>,
class Allocator=allocator <pair <const Key, Type>>>
class hash_multimap
Parameter
Schlüssel
Der im hash_multimap-Element zu speichernde Schlüsseldatentyp.
Typ
Der im hash_multimap-Element zu speichernde Elementdatentyp.
Merkmale
Der Typ, der zwei Funktionsobjekte enthält, eines der Klassenmerkmale, die zwei Elementwerte als Sortierschlüssel vergleichen können, um ihre relative Reihenfolge und eine Hashfunktion zu bestimmen, die eine unäre Prädikatzuordnung schlüsselwerte der Elemente zu nicht signierten ganzzahligen Zahlen des Typs size_t
ist. Das Argument ist optional und hash_compare<Key, less<Key>>
ist der Standardwert.
Verteiler
Der Typ, mit dem das gespeicherte Zuordnungsobjekt darstellt wird, mit dem Details zum Belegen und Freigeben des Arbeitsspeichers des hash_multimap-Elements gekapselt werden. Dieses Argument ist optional, und der Standardwert ist allocator<pair <const Key, Type>>
.
Hinweise
Das hash_multimap-Element ist:
Ein assoziativer Container, der ein Container variabler Größe ist, der den effizienten Abruf von Elementwerten auf Grundlage eines zugeordneten Schlüsselwert unterstützt.
Umkehrbar, da ein bidirektionaler Iterator für den Zugriff auf die Elemente bereitgestellt wird.
Gehasht, da die Elemente auf Grundlage des Werts einer Hashfunktion, die auf die Schlüsselwerte der Elemente angewendet wird, in Buckets gruppiert werden.
Mehrfach, da die Elemente keine eindeutige Schlüssel aufweisen müssen, damit ein Schlüsselwert über viele zugeordnete Elementdatenwerte verfügen kann.
Ein Paar assoziativer Container, da sich die Elementwerte von den Schlüsselwerten unterscheiden.
Eine Klassenvorlage, da die bereitgestellte Funktionalität generisch und so unabhängig vom spezifischen Datentyp ist, der als Elemente oder Schlüssel enthalten ist. Die für Elemente und Schlüssel zu verwendenden Datentypen werden stattdessen in der Klassenvorlage zusammen mit der Vergleichsfunktion und der Zuweisung als Parameter angegeben.
Der Hauptvorteil des Hashverfahrens gegenüber der Sortierung ist die größere Effizienz. Bei einem erfolgreichen Hashverfahren werden Einfüge-, Lösch- und Suchvorgänge, verglichen mit einer Zeit, die zum Logarithmus der Anzahl von Elementen im Container für Sortiertechniken proportional ist, in einer konstanten Durchschnittszeit durchgeführt. Der Wert eines Elements in einem hash_multimap-Element, aber nicht der zugehörige Schlüsselwert, werden möglicherweise direkt geändert. Stattdessen müssen die Schlüsselwerte, die alten Elementen zugeordnet sind, gelöscht, und stattdessen neuen Schlüsselwerten für neue Elemente zugeordnet werden.
Die Auswahl des Containertyps sollte im Allgemeinen auf Grundlage des für die Anwendung erforderlichen Suchen und Einfügetyps erfolgen. Gehashte assoziative Container sind für Such-, Einfüge- und Entfernvorgänge optimiert. Die Memberfunktionen, die diese Vorgänge explizit unterstützen, sind effizient, wenn sie mit einer gut entworfenen Hashfunktion verwendet werden. Dann werden sie in einer Zeit ausgeführt, die im Durchschnitt konstant und nicht von der Anzahl von Elementen im Container abhängig ist. Eine ausgereifte Hashfunktion erzeugt eine vereinheitlichte Verteilung gehashter Werte und minimiert die Anzahl von Konflikten, bei denen ein Konflikt vorhergesagt wird, wenn unterschiedliche Schlüsselwerte dem gleichen gehashten Wert zugeordnet werden. Im schlimmsten Fall ist die Anzahl von Vorgängen bei der schlimmstmöglichen Hashfunktion zu der Anzahl von Elementen in der Sequenz proportional (lineare Zeit).
Das hash_multimap-Element sollte der ausgewählte assoziative Container sein, wenn die Bedingungen, mit denen die Werte von der Anwendung den Schlüsseln zugeordnet werden, erfüllt werden. Ein Modell für diesen Strukturtyp ist eine sortierte Liste von Schlüsselwörtern mit zugeordneten Zeichenfolgewerten, die, sagen wir, Definitionen bereitstellen, in denen die Wörter nicht immer eindeutig definiert wurden. Wenn die Schlüsselwörter stattdessen eindeutig definiert werden, damit die Schlüssel eindeutig sind, ist ein hash_map-Element der gewählte Container. Wenn hingegen nur die Wortliste gespeichert wurden, ist ein hash_set-Element der richtige Container. Wenn mehrfaches Vorkommen der Wörter zugelassen wird, ist ein hash_multiset-Element die geeignete Containerstruktur.
Das hash_multimap-Element sortiert die gesteuerte Sequenz, indem ein gespeichertes Traits
-Hashobjekt des Objekts value_compare aufgerufen wird. Auf das gespeicherte Objekt kann möglicherweise zugegriffen werden, indem die Memberfunktion key_comp aufrufen wird. Ein solches Funktionsobjekt muss dasselbe Verhalten haben wie ein aus der Klasse hash_compare<Key, less<Key>>
abgeleitetes Objekt. Insbesondere für alle Key
-Werte des Typs Key
, erreicht der Traits (Key)
-Aufruf eine Verteilung der Werte vom Typ size_t
.
Im Allgemeinen müssen die Elemente der Vorwärtsiteratoren etwas weniger als vergleichbar sein, um diese Sortierung zu erstellen, sodass beliebige zwei Elemente möglicherweise als gleichwertig bestimmt werden (in dem Sinne, dass keins geringer als das Andere ist), oder dass eins geringer als das Andere ist. Dies führt zu einer Sortierung zwischen den nicht gleichwertigen Elementen. Etwas technischer betrachtet ist die Vergleichsfunktion ein binäres Prädikat, das eine strenge schwache Sortierung im mathematischen Sinn verursacht. Bei einem binären f(x, y)--Prädikat handelt es sich um ein Funktionsobjekt, das die zwei Argumentobjekte x
und y
aufweist sowie einen Rückgabewert von true
oder false
. Eine Sortierung, die auf ein hash_multimap-Element angewendet wird, ist eine strenge schwache Sortierung, wenn das binäre Prädikat irreflexiv, antisymmetrisch und transitiv ist, und wenn die Äquivalenz transitiv ist, wobei die beiden Objekte x
und y
als äquivalent definiert werden, wenn sowohl f (x, y) als auch f (x, y) false
sind. Wenn der stärkere Gleichheitszustand zwischen Schlüsseln die Äquivalenz ersetzt, erfolgt die Sortierung total (d. h., alle Elemente werden zueinander sortiert), und die verglichenen Schlüssel sind von den einander nicht mehr zu unterscheiden.
Die tatsächliche Reihenfolge der Elemente in der gesteuerten Sequenz hängt von der Hashfunktion, der Sortierfunktion und der aktuellen Größe der Hashtabelle ab, die im Containerobjekt gespeichert wird. Die aktuelle Größe der Hashtabelle kann nicht bestimmt werden. Deshalb kann die Reihenfolge der Elemente in der gesteuerten Sequenz im Allgemeinen nicht vorhergesagt werden. Das Einfügen von Elementen führt nicht dazu, dass Iteratoren ungültig werden, und durch das Entfernen von Elementen werden nur solche Iteratoren ungültig, die speziell auf die entfernten Elemente gezeigt haben.
Der von einer hash_multimap-Klasse bereitgestellte Iterator ist ein bidirektionaler Iterator. Die Klassenmemberfunktionen insert und hash_multimap weisen allerdings Versionen auf, die einen abgeschwächten Eingabeiterator als Vorlagenparameter akzeptieren, dessen Funktionalitätsanforderungen weniger umfangreich sind, als die von der Klasse bidirektionaler Iteratoren garantierten. Die verschiedenen Iteratorkonzepte bilden eine Family, die durch Verfeinerungen in ihrer Funktionen verknüpft ist. Jedes Iteratorkonzept weist einen eigenes hash_multimap-Element von Anforderungen auf, und die damit funktionierenden Algorithmen müssen die Annahmen hinsichtlich der von diesem Iteratortyp bereitgestellten Anforderungen begrenzen. Es kann davon ausgegangen werden, dass ein Eingabeiterator möglicherweise so dereferenziert wird, dass er auf ein Objekt verweist und dieses möglicherweise zum folgenden Iterator in der Sequenz erhöht. Das ist eine minimaler hash_multimap-Funktion, allerdings genügt sie, um sinnvoll über einen Bereich von [First, Last)
-Iteratoren im Kontext der Klassenmemberfunktionen zu sprechen.
Konstruktoren
Konstruktor | Beschreibung |
---|---|
hash_multimap | Erstellt eine Liste einer bestimmten Größe bzw. mit Elementen eines bestimmten Werts oder mit einem bestimmten allocator -Element oder als vollständige bzw. teilweise Kopie eines anderen hash_multimap -Elements. |
TypeDefs
Typname | Beschreibung |
---|---|
allocator_type | Ein Typ, der die allocator -Klassentyp für das hash_multimap -Objekt darstellt. |
const_iterator | Ein Typ, der einen bidirektionalen Iterator bereitstellt, der im const -Element ein hash_multimap -Element lesen kann. |
const_pointer | Ein Typ, der einen Zeiger auf ein const -Element in einem hash_multimap -Element bereitstellt. |
const_reference | Ein Typ, der einen Verweis auf ein const -Element bereitstellt, das in einem hash_multimap -Element zum Lesen und Ausführen von const -Vorgängen gespeichert ist. |
const_reverse_iterator | Ein Typ, der einen bidirektionalen Iterator bereitstellt, der im const -Element jedes hash_multimap -Element lesen kann. |
difference_type | Ein Ganzzahltyp mit Vorzeichen, der dazu verwendet werden kann, die Anzahl von Elementen eines hash_multimap -Elements in einen Bereich zwischen Elementen darzustellen, auf die von Iteratoren gezeigt wird. |
iterator | Ein Typ, der einen bidirektionalen Iterator bereitstellt, mit dem jedes Element in einer hash_multimap gelesen oder geändert werden kann. |
key_compare | Eine Typ, der ein Funktionsobjekt bereitstellt, das zwei Sortierschlüssel vergleichen kann, um die relative Position von zwei Elementen im hash_multimap -Element zu bestimmen. |
key_type | Ein Typ, mit dem das Sortierschlüsselobjekt beschrieben wird, das jedes Element von hash_multimap bildet. |
mapped_type | Ein Typ, der den in einer hash_multimap gespeicherten Datentyp darstellt. |
pointer | Ein Typ, der einen Zeiger auf ein Element in einer hash_multimap bereitstellt. |
reference | Ein Typ, der einen Verweis auf ein in einer hash_multimap gespeichertes Element bereitstellt. |
reverse_iterator | Ein Typ, der einen bidirektionalen Iterator bereitstellt, mit dem ein Element in einem umgekehrten hash_multimap -Element gelesen oder geändert werden kann. |
size_type | Eine Ganzzahltyp ohne Vorzeichen, der die Anzahl von Elementen in hash_multimap darstellen kann. |
value_type | Eine Typ, der ein Funktionsobjekt bereitstellt, das zwei Elemente als Sortierschlüssel vergleichen kann, um die relative Position im hash_multimap -Element zu bestimmen. |
Memberfunktionen
Memberfunktion | Beschreibung |
---|---|
begin | Gibt ein Iterator zurück, der das erste Element im hash_multimap -Element adressiert. |
cbegin | Gibt einen konstanten Iterator zurück, der das erste Element im hash_multimap -Element adressiert. |
cend | Gibt einen konstanten Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines hash_multimap -Elements nachfolgt. |
clear | Löscht alle Elemente einer hash_multimap auf. |
count | Gibt die Anzahl von Elementen in einem hash_multimap -Element zurück, dessen Schlüssel dem von einem Parameter angegebenen Schlüssel entspricht. |
crbegin | Gibt einen konstanten Iterator zurück, der das erste Element im umgekehrten hash_multimap -Element adressiert. |
crend | Gibt einen konstanten Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines umgekehrten hash_multimap -Elements nachfolgt. |
emplace | Fügt ein Element ein, das vor Ort in ein hash_multimap -Element erstellt wird. |
emplace_hint | Fügt ein Element ein, das vor Ort mit einem Platzierungshinweis in ein hash_multimap -Element erstellt wird. |
empty | Testet, ob ein hash_multimap -Element leer ist. |
end | Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element einem hash_multimap -Element nachfolgt. |
equal_range | Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element einem hash_multimap -Element nachfolgt. |
erase | Entfernt ein Element oder eine Reihe von Elementen in einer hash_multimap aus angegebenen Speicherorten. |
find | Gibt einen Iterator zurück, der die Position eines Elements in einem hash_multimap -Element adressiert, das einen Schlüssel aufweist, der einen angegebenen Schlüssel entspricht. |
get_allocator | Gibt eine Kopie des zum Erstellen von allocator verwendeten hash_multimap -Objekts zurück. |
insert | Fügt ein Element oder einen Elementbereich an einer angegebenen Position in das hash_multimap -Element ein. |
key_comp | Ruft eine Kopie des Vergleichsobjekts ab, das zum Sortieren der Schlüssel in hash_multimap verwendet wird. |
lower_bound | Gibt einen Iterator zum ersten Element in einem hash_multimap -Element mit einem Schlüsselwert zurück, der gleich oder größer ist, als ein angegebener Schlüssel. |
max_size | Gibt die Maximallänge der hash_multimap zurück. |
rbegin | Gibt einen Iterator zurück, der das erste Element in einem umgekehrten hash_multimap -Element adressiert. |
rend | Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines umgekehrten hash_multimap -Elements nachfolgt. |
size | Gibt eine neue Größe für eine hash_multimap an. |
swap | Tauscht die Elemente zweier hash_multimap n. |
upper_bound | Gibt einen Iterator zum ersten Element in einem hash_multimap -Element mit einem Schlüsselwert zurück, der größer ist, als ein angegebener Schlüssel. |
value_comp | Ruft eine Kopie des Vergleichsobjekts ab, das zum Sortieren der Elementwerte in hash_multimap verwendet wird. |
Operatoren
Operator | Beschreibung |
---|---|
hash_multimap::operator= | Ersetzt die Elemente eines hash_multimap -Elements durch eine Kopie eines anderen hash_multimap -Elements. |
Anforderungen
Header:<hash_map>
Namespace: stdext
hash_multimap::allocator_type
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der die Zuweisungsklasse für das hash_multimap-Objekt darstellt.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::allocator_type allocator_type;
Hinweise
allocator_type
ist ein Synonym für den Vorlagenparameter Allocator
.
Weitere Informationen zu Allocator
finden Sie im Abschnitt „Hinweise“ des Themas hash_multimap-Klasse.
Beispiel
Im Beispiel für get_allocator finden Sie ein Beispiel mit allocator_type
.
hash_multimap::begin
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen Iterator zurück, der das erste Element im hash_multimap-Element adressiert.
const_iterator begin() const;
iterator begin();
Rückgabewert
Ein bidirektionaler Iterator, der das erste Element in der hash_multimap adressiert oder auf den Speicherort hinweist, der auf eine leere hash_multimap folgt.
Hinweise
Wenn der Rückgabewert begin
eines const_iterator
Objekts zugewiesen ist, können die Elemente im hash_multimap-Objekt nicht geändert werden. Wenn der Rückgabewert begin
eines iterator
Objekts zugewiesen ist, können die Elemente im hash_multimap-Objekt geändert werden.
Beispiel
// hash_multimap_begin.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: iterator hm1_Iter;
hash_multimap <int, int> :: const_iterator hm1_cIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 0, 0 ) );
hm1.insert ( Int_Pair ( 1, 1 ) );
hm1.insert ( Int_Pair ( 2, 4 ) );
hm1_cIter = hm1.begin ( );
cout << "The first element of hm1 is " << hm1_cIter -> first
<< "." << endl;
hm1_Iter = hm1.begin ( );
hm1.erase ( hm1_Iter );
// The following 2 lines would err because the iterator is const
// hm1_cIter = hm1.begin ( );
// hm1.erase ( hm1_cIter );
hm1_cIter = hm1.begin( );
cout << "The first element of hm1 is now " << hm1_cIter -> first
<< "." << endl;
}
The first element of hm1 is 0.
The first element of hm1 is now 1.
hash_multimap::cbegin
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen const-Iterator zurück, der das erste Element in der hash_multimap adressiert.
const_iterator cbegin() const;
Rückgabewert
Ein bidirektionaler const-Iterator, der das erste Element in der hash_multimap adressiert oder auf den Speicherort hinweist, der auf eine leere hash_multimap
folgt.
Beispiel
// hash_multimap_cbegin.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_iterator hm1_cIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 2, 4 ) );
hm1_cIter = hm1.cbegin ( );
cout << "The first element of hm1 is "
<< hm1_cIter -> first << "." << endl;
}
The first element of hm1 is 2.
hash_multimap::cend
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen const-Iterator zurück, der den Speicherort adressiert, der auf das letzte Element einer hash_multimap folgt.
const_iterator cend() const;
Rückgabewert
Ein bidirektionaler const-Iterator, der den Speicherort adressiert, der auf das letzte Element einer hash_multimap folgt. Wenn die hash_multimap
leer ist, gilt anschließend hash_multimap::cend == hash_multimap::begin
.
Hinweise
cend
wird verwendet, um zu testen, ob ein Iterator das Ende seiner hash_multimap erreicht hat.
Der von cend
zurückgegebene Wert darf nicht dereferenziert werden.
Beispiel
// hash_multimap_cend.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_iterator hm1_cIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_cIter = hm1.cend( );
hm1_cIter--;
cout << "The value of last element of hm1 is "
<< hm1_cIter -> second << "." << endl;
}
The value of last element of hm1 is 30.
hash_multimap::clear
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Löscht alle Elemente einer hash_multimap.
void clear();
Hinweise
Beispiel
Im folgenden Beispiel wird die Verwendung der hash_multimap::clear-Memberfunktion gezeigt.
// hash_multimap_clear.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
hash_multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 1));
hm1.insert(Int_Pair(2, 4));
i = hm1.size();
cout << "The size of the hash_multimap is initially "
<< i << "." << endl;
hm1.clear();
i = hm1.size();
cout << "The size of the hash_multimap after clearing is "
<< i << "." << endl;
}
The size of the hash_multimap is initially 2.
The size of the hash_multimap after clearing is 0.
hash_multimap::const_iterator
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der einen bidirektionalen Iterator bereitstellt, der ein const
Element im hash_multimap lesen kann.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::const_iterator const_iterator;
Hinweise
Ein const_iterator
-Typ kann nicht zum Ändern des Werts eines Elements verwendet werden.
Die const_iterator
durch hash_multimap definierten Objekte von value_type, die vom Typ pair<const Key, Type>
sind. Der Wert des Schlüssels ist durch das erste Memberpaar verfügbar, und der Wert des zugeordneten Elements ist durch das zweite Memberpaar verfügbar.
Verwenden Sie den ->
Operator, um ein const_iterator
cIter
Element in einem hash_multimap abzuleiten, das auf ein Element verweist.
Um auf den Wert des Schlüssels für das Element zuzugreifen, verwenden Sie cIter->first
die Entsprechende .(*cIter).first
Um auf den Wert des zugeordneten Datums für das Element zuzugreifen, verwenden Sie cIter->second
dies , was entspricht (*cIter).second
.
Beispiel
Im Beispiel für begin finden Sie ein Beispiel mit const_iterator
.
hash_multimap::const_pointer
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der einen Zeiger auf ein const
Element in einem hash_multimap bereitstellt.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::const_pointer const_pointer;
Hinweise
Ein const_pointer
-Typ kann nicht zum Ändern des Werts eines Elements verwendet werden.
In den meisten Fällen sollte ein Iterator für den Zugriff auf Elemente in einem hash_multimap-Objekt verwendet werden.
hash_multimap::const_reference
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der einen Verweis auf ein const
element bereitstellt, das in einem hash_multimap zum Lesen und Ausführen von const
Vorgängen gespeichert ist.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::const_reference const_reference;
Hinweise
Beispiel
// hash_multimap_const_ref.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
// Declare and initialize a const_reference &Ref1
// to the key of the first element
const int &Ref1 = ( hm1.begin( ) -> first );
// The following line would cause an error because the
// non-const_reference cannot be used to access the key
// int &Ref1 = ( hm1.begin( ) -> first );
cout << "The key of first element in the hash_multimap is "
<< Ref1 << "." << endl;
// Declare and initialize a reference &Ref2
// to the data value of the first element
int &Ref2 = ( hm1.begin() -> second );
cout << "The data value of 1st element in the hash_multimap is "
<< Ref2 << "." << endl;
}
The key of first element in the hash_multimap is 1.
The data value of 1st element in the hash_multimap is 10.
hash_multimap::const_reverse_iterator
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der einen bidirektionalen Iterator bereitstellt, der jedes const
Element im hash_multimap lesen kann.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::const_reverse_iterator const_reverse_iterator;
Hinweise
Ein const_reverse_iterator
-Typ kann nicht den Wert eines Elements ändern und wird verwendet, um die hash_multimap in umgekehrter Reihenfolge zu durchlaufen.
Das const_reverse_iterator
durch hash_multimap definierte Element verweist auf Objekte value_type, deren pair<const Key, Type>
erstes Element der Schlüssel für das Element ist und dessen zweites Element das zugeordnete Datum ist, das vom Element gehalten wird.
Verwenden Sie den ->
Operator, um ein const_reverse_iterator
crIter
Element in einem hash_multimap abzuleiten, das auf ein Element verweist.
Um auf den Wert des Schlüssels für das Element zuzugreifen, verwenden Sie crIter->first
die Entsprechende .(*crIter).first
Um auf den Wert des zugeordneten Datums für das Element zuzugreifen, verwenden Sie crIter->second
dies , was entspricht (*crIter).second
.
Beispiel
Im Beispiel für rend wird verdeutlicht, wie const_reverse_iterator
deklariert und verwendet wird.
hash_multimap::count
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt die Anzahl von Elementen in einer hash_multimap-Klasse zurück, dessen Schlüssel dem von einem Parameter angegebenen Schlüssel entspricht.
size_type count(const Key& key) const;
Parameter
key
Der Schlüssel des Elements mit einem übereinstimmenden Schlüssel aus der hash_multimap-Klasse.
Rückgabewert
1, wenn die hash_multimap-Klasse ein Element enthält, dessen Sortierungsschlüssel dem Parameterschlüssel entspricht; 0, wenn die hash_multimap-Klasse kein Element mit einem übereinstimmenden Schlüssel enthält.
Hinweise
Die Memberfunktion gibt die Anzahl der Elemente im Bereich zurück.
[lower_bound ( key
), upper_bound ( ) key
die über einen Schlüsselwertschlüssel verfügen.
Beispiel
Im folgenden Beispiel wird die Verwendung der Memberfunktion „hash_multimap::count“ gezeigt.
// hash_multimap_count.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
hash_multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 1));
hm1.insert(Int_Pair(2, 1));
hm1.insert(Int_Pair(1, 4));
hm1.insert(Int_Pair(2, 1));
// Elements do not need to have unique keys in hash_multimap,
// so duplicates are allowed and counted
i = hm1.count(1);
cout << "The number of elements in hm1 with a sort key of 1 is: "
<< i << "." << endl;
i = hm1.count(2);
cout << "The number of elements in hm1 with a sort key of 2 is: "
<< i << "." << endl;
i = hm1.count(3);
cout << "The number of elements in hm1 with a sort key of 3 is: "
<< i << "." << endl;
}
The number of elements in hm1 with a sort key of 1 is: 2.
The number of elements in hm1 with a sort key of 2 is: 2.
The number of elements in hm1 with a sort key of 3 is: 0.
hash_multimap::crbegin
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen const-Iterator zurück, der das erste Element in einer umgekehrten hash_multimap adressiert.
const_reverse_iterator crbegin() const;
Rückgabewert
Ein umgekehrter bidirektionaler const-Iterator, mit dem das erste Element in einer umgekehrten hash_multimap adressiert wird (bzw. mit dem das ehemals letzte Element in der nicht umgekehrten hash_multimap
adressiert wird).
Hinweise
crbegin
wird bei einer umgekehrten hash_multimap auf die gleiche Weise verwendet wie hash_multimap::begin mit einer hash_multimap
.
Bei dem Rückgabewert von crbegin
kann das hash_multimap
-Objekt nicht geändert werden.
Mit crbegin
kann ein hash_multimap
rückwärts durchlaufen werden.
Beispiel
// hash_multimap_crbegin.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_reverse_iterator hm1_crIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_crIter = hm1.crbegin( );
cout << "The first element of the reversed hash_multimap hm1 is "
<< hm1_crIter -> first << "." << endl;
}
The first element of the reversed hash_multimap hm1 is 3.
hash_multimap::crend
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen const-Iterator zurück, der den Speicherort adressiert, der auf das letzte Element einer umgekehrten hash_multimap folgt.
const_reverse_iterator crend() const;
Rückgabewert
Ein bidirektionaler const_reverse-Iterator, der den Standort anspricht, der dem letzten Element in einer umgekehrten hash_multimap nachfolgt (der Speicherort, der dem ersten Element in der nicht umgekehrten hash_multimap
vorangegangen war).
Hinweise
crend
wird bei einer umgekehrten hash_multimap auf die gleiche Weise verwendet wie hash_multimap::end mit einer hash_multimap.
Bei dem Rückgabewert von crend
kann das hash_multimap
-Objekt nicht geändert werden.
crend
kann verwendet werden, um zu testen, ob ein umgekehrter Iterator das Ende seiner hash_multimap erreicht hat.
Der von crend
zurückgegebene Wert darf nicht dereferenziert werden.
Beispiel
// hash_multimap_crend.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_reverse_iterator hm1_crIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_crIter = hm1.crend( );
hm1_crIter--;
cout << "The last element of the reversed hash_multimap hm1 is "
<< hm1_crIter -> first << "." << endl;
}
The last element of the reversed hash_multimap hm1 is 3.
hash_multimap::d ifference_type
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Ganzzahltyp mit Vorzeichen, der dazu verwendet werden kann, die Anzahl von Elementen einer hash_multimap in einem Bereich zwischen Elementen darzustellen, auf die von Iteratoren gezeigt wird.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::difference_type difference_type;
Hinweise
difference_type
ist der Typ, der beim Subtrahieren oder Inkrementieren über Iteratoren des Containers zurückgegeben wird. difference_type
wird normalerweise verwendet, um die Anzahl von Elementen im Bereich (first, last) zwischen den Iteratoren first
und last
darzustellen. Dazu gehört das Element, auf das durch first
gezeigt wird und der Bereich von Elementen bis zu (aber nicht einschließlich) dem Element, auf das durch last
gezeigt wird.
Bitte beachten Sie, dass die Subtraktion zwischen Iteratoren nur von Iteratoren mit zufälligem Zugriff unterstützt wird, die über einen Container mit zufälligem Zugriff wie „vector“ bereitgestellt werden. Dies gilt, obwohl difference_type
für alle Iteratoren verfügbar ist, die die Anforderungen eines Eingabeiterators erfüllen. Hierzu zählt auch die Klasse bidirektionaler Iteratoren, die von umkehrbaren Containern wie „set“ unterstützt wird.
Beispiel
// hash_multimap_difference_type.cpp
// compile with: /EHsc
#include <iostream>
#include <hash_map>
#include <algorithm>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(2, 20));
hm1.insert(Int_Pair(1, 10));
hm1.insert(Int_Pair(3, 20));
// The following will insert, because map keys
// do not need to be unique
hm1.insert(Int_Pair(2, 30));
hash_multimap<int, int>::iterator hm1_Iter, hm1_bIter, hm1_eIter;
hm1_bIter = hm1.begin();
hm1_eIter = hm1.end();
// Count the number of elements in a hash_multimap
hash_multimap<int, int>::difference_type df_count = 0;
hm1_Iter = hm1.begin();
while (hm1_Iter != hm1_eIter)
{
df_count++;
hm1_Iter++;
}
cout << "The number of elements in the hash_multimap hm1 is: "
<< df_count << "." << endl;
cout << "The keys of the mapped elements are:";
for (hm1_Iter= hm1.begin() ; hm1_Iter!= hm1.end();
hm1_Iter++)
cout << " " << hm1_Iter-> first;
cout << "." << endl;
cout << "The values of the mapped elements are:";
for (hm1_Iter= hm1.begin() ; hm1_Iter!= hm1.end();
hm1_Iter++)
cout << " " << hm1_Iter-> second;
cout << "." << endl;
}
The number of elements in the hash_multimap hm1 is: 4.
The keys of the mapped elements are: 1 2 2 3.
The values of the mapped elements are: 10 20 30 20.
hash_multimap::emplace
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Fügt ein Element, das vor Ort erstellt wird, in einer hash_multimap ein.
template <class ValTy>
iterator emplace(ValTy&& val);
Parameter
val
Der Wert, der verwendet wird, um das einzufügende Element per Verschiebung in die hash_multimap zu erstellen.
Rückgabewert
Die emplace
-Memberfunktion gibt einen Iterator zurück, der auf den Speicherort zeigt, an dem das neue Element eingefügt wurde.
Hinweise
Der hash_multimap::value_type eines Elements wird paarweise angegeben, sodass der Wert eines Elements ein geordnetes Paar ist, bei dem die erste Komponente gleich dem Schlüsselwert und die zweite Komponente gleich dem Datenwert des Elements ist.
Beispiel
// hash_multimap_emplace.cpp
// compile with: /EHsc
#include<hash_multimap>
#include<iostream>
#include <string>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, string> hm1;
typedef pair<int, string> is1(1, "a");
hm1.emplace(move(is1));
cout << "After the emplace, hm1 contains:" << endl
<< " " << hm1.begin()->first
<< " => " << hm1.begin()->second
<< endl;
}
After the emplace insertion, hm1 contains:
1 => a
hash_multimap::emplace_hint
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Fügt ein Element ein, das vor Ort mit einem Platzierungshinweis in einer hash_multimap erstellt wird.
template <class ValTy>
iterator emplace_hint(
const_iterator _Where,
ValTy&& val);
Parameter
val
Der Wert verwendet normalerweise ein Bewegungskonstrukt, um ein Element in eine hash_multimap einzufügen, außer hash_multimap
hat bereits das Element (oder, allgemeiner gesagt, ein Element, dessen Schlüssel gleichwertig sortiert wird).
_Wo
Ein Hinweis bezüglich des Platzes, an dem mit der Suche nach dem richtigen Einfügepunkt begonnen wird.
Rückgabewert
Die hash_multimap::emplace-Memberfunktion gibt einen Iterator zurück, der auf den Speicherort zeigt, an dem das neue Element in hash_multimap
eingefügt wurde.
Hinweise
Der hash_multimap::value_type eines Elements wird paarweise angegeben, sodass der Wert eines Elements ein geordnetes Paar ist, bei dem die erste Komponente gleich dem Schlüsselwert und die zweite Komponente gleich dem Datenwert des Elements ist.
Das Einfügen kann in amortisierter Konstantenzeit statt logarithmischer Zeit erfolgen, wenn die Einfügemarke unmittelbar _Where folgt.
Beispiel
// hash_multimap_emplace_hint.cpp
// compile with: /EHsc
#include<hash_multimap>
#include<iostream>
#include <string>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, string> hm1;
typedef pair<int, string> is1(1, "a");
hm1.emplace(hm1.begin(), move(is1));
cout << "After the emplace insertion, hm1 contains:" << endl
<< " " << hm1.begin()->first
<< " => " << hm1.begin()->second
<< endl;
}
After the emplace insertion, hm1 contains:
1 => a
hash_multimap::empty
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Testet, ob ein hash_multimap-Element leer ist.
bool empty() const;
Rückgabewert
true
wenn die hash_multimap leer ist; false
wenn die hash_multimap nicht in Denkhaft ist.
Hinweise
Beispiel
// hash_multimap_empty.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1, hm2;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 1 ) );
if ( hm1.empty( ) )
cout << "The hash_multimap hm1 is empty." << endl;
else
cout << "The hash_multimap hm1 is not empty." << endl;
if ( hm2.empty( ) )
cout << "The hash_multimap hm2 is empty." << endl;
else
cout << "The hash_multimap hm2 is not empty." << endl;
}
The hash_multimap hm1 is not empty.
The hash_multimap hm2 is empty.
hash_multimap::end
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen Iterator zurück, der den Speicherort adressiert, der auf das letzte Element einer hash_multimap folgt.
const_iterator end() const;
iterator end();
Rückgabewert
Ein bidirektionaler Iterator, der den Speicherort adressiert, der auf das letzte Element einer hash_multimap folgt. Ist die hash_multimap leer, folgt anschließend „hash_multimap::end == hash_multimap::begin“.
Hinweise
end
wird verwendet, um zu testen, ob ein Iterator das Ende seiner hash_multimap erreicht hat.
Der von end
zurückgegebene Wert darf nicht dereferenziert werden.
Beispiel
// hash_multimap_end.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: iterator hm1_Iter;
hash_multimap <int, int> :: const_iterator hm1_cIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_cIter = hm1.end( );
hm1_cIter--;
cout << "The value of last element of hm1 is "
<< hm1_cIter -> second << "." << endl;
hm1_Iter = hm1.end( );
hm1_Iter--;
hm1.erase ( hm1_Iter );
// The following 2 lines would err because the iterator is const
// hm1_cIter = hm1.end ( );
// hm1_cIter--;
// hm1.erase ( hm1_cIter );
hm1_cIter = hm1.end( );
hm1_cIter--;
cout << "The value of last element of hm1 is now "
<< hm1_cIter -> second << "." << endl;
}
The value of last element of hm1 is 30.
The value of last element of hm1 is now 20.
hash_multimap::equal_range
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt ein Iteratorpaar jeweils zum ersten Element in einer hash_multimap mit einem Schlüssel zurück, der größer als ein bestimmter Schlüssel ist, bzw. zum ersten Element in einer hash_multimap mit einem Schlüssel, der größer oder gleich dem Schlüssel ist.
pair <const_iterator, const_iterator> equal_range (const Key& key) const;
pair <iterator, iterator> equal_range (const Key& key);
Parameter
key
Der Argumentschlüssel, der mit dem Sortierschlüssel eines Elements aus der zu durchsuchenden hash_multimap verglichen wird.
Rückgabewert
Ein Iteratorenpaar, bei dem der erste Iterator der lower_bound des Schlüssels und der zweite Iterator der upper_bound des Schlüssels ist.
Sie können auf den ersten Iterator eines von einer Memberfunktion zurückgegebenen Paars pr
zugreifen, indem Sie pr
. verwenden Sie * ( pr
zum Ableiten des unteren Iterators). zuerst). Sie können auf den zweiten Iterator eines von einer Memberfunktion zurückgegebenen Paars pr
zugreifen, indem Sie pr
. zweiten und zur Ableitung des oberen Begrenzungs iterators verwenden Sie *( pr
. second).
Hinweise
Beispiel
// hash_multimap_equal_range.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
typedef hash_multimap <int, int> IntMMap;
IntMMap hm1;
hash_multimap <int, int> :: const_iterator hm1_RcIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
pair <IntMMap::const_iterator, IntMMap::const_iterator> p1, p2;
p1 = hm1.equal_range( 2 );
cout << "The lower bound of the element with a key of 2\n"
<< "in the hash_multimap hm1 is: "
<< p1.first -> second << "." << endl;
cout << "The upper bound of the element with a key of 2\n"
<< "in the hash_multimap hm1 is: "
<< p1.second -> second << "." << endl;
// Compare the upper_bound called directly
hm1_RcIter = hm1.upper_bound( 2 );
cout << "A direct call of upper_bound( 2 ) gives "
<< hm1_RcIter -> second << "," << endl
<< "matching the 2nd element of the pair "
<< "returned by equal_range( 2 )." << endl;
p2 = hm1.equal_range( 4 );
// If no match is found for the key,
// both elements of the pair return end( )
if ( ( p2.first == hm1.end( ) ) && ( p2.second == hm1.end( ) ) )
cout << "The hash_multimap hm1 doesn't have an element "
<< "with a key less than 4." << endl;
else
cout << "The element of hash_multimap hm1 with a key >= 40 is: "
<< p1.first -> first << "." << endl;
}
The lower bound of the element with a key of 2
in the hash_multimap hm1 is: 20.
The upper bound of the element with a key of 2
in the hash_multimap hm1 is: 30.
A direct call of upper_bound( 2 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 2 ).
The hash_multimap hm1 doesn't have an element with a key less than 4.
hash_multimap::erase
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Es wird ein Element oder ein Bereich von Elementen in einer hash_multimap von angegebenen Speicherorten entfernt oder es werden die einem angegebenen Schlüssel entsprechenden Elemente entfernt.
iterator erase(iterator _Where);
iterator erase(iterator first, iterator last);
size_type erase(const key_type& key);
Parameter
_Wo
Die Position des aus der hash_multimap zu entfernenden Elements.
first
Die Position des ersten Elements, das aus der hash_multimap entfernt werden soll.
last
Die Position direkt hinter dem letzten aus der hash_multimap entfernten Element.
key
Der Schlüssel des aus der hash_multimap zu entfernenden Elements.
Rückgabewert
Bei den ersten beiden Memberfunktionen ist es ein bidirektionaler Iterator, der das erste über die entfernten Elemente hinaus verbliebene Element festlegt, oder ein Zeiger auf das das Ende der hash_multimap, wenn kein solches Element vorhanden ist.
Für die dritte Memberfunktion wird die Anzahl der von der hash_multimap entfernten Elemente zurückgegeben.
Hinweise
Von der Memberfunktionen wird nie eine Ausnahme ausgelöst.
Beispiel
Im folgenden Beispiel wird die Verwendung der Memberfunktion "hash_multimap::erase" gezeigt.
// hash_multimap_erase.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1, hm2, hm3;
hash_multimap<int, int> :: iterator pIter, Iter1, Iter2;
int i;
hash_multimap<int, int>::size_type n;
typedef pair<int, int> Int_Pair;
for (i = 1; i < 5; i++)
{
hm1.insert(Int_Pair (i, i) );
hm2.insert(Int_Pair (i, i*i) );
hm3.insert(Int_Pair (i, i-1) );
}
// The 1st member function removes an element at a given position
Iter1 = ++hm1.begin();
hm1.erase(Iter1);
cout << "After the 2nd element is deleted, "
<< "the hash_multimap hm1 is:";
for (pIter = hm1.begin(); pIter != hm1.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
// The 2nd member function removes elements
// in the range [ first, last)
Iter1 = ++hm2.begin();
Iter2 = --hm2.end();
hm2.erase(Iter1, Iter2);
cout << "After the middle two elements are deleted, "
<< "the hash_multimap hm2 is:";
for (pIter = hm2.begin(); pIter != hm2.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
// The 3rd member function removes elements with a given key
hm3.insert(Int_Pair (2, 5));
n = hm3.erase(2);
cout << "After the element with a key of 2 is deleted,\n"
<< "the hash_multimap hm3 is:";
for (pIter = hm3.begin(); pIter != hm3.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
// The 3rd member function returns the number of elements removed
cout << "The number of elements removed from hm3 is: "
<< n << "." << endl;
// The dereferenced iterator can also be used to specify a key
Iter1 = ++hm3.begin();
hm3.erase(Iter1);
cout << "After another element with a key equal to that of the"
<< endl;
cout << "2nd element is deleted, "
<< "the hash_multimap hm3 is:";
for (pIter = hm3.begin(); pIter != hm3.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
}
After the 2nd element is deleted, the hash_multimap hm1 is: 1 3 4.
After the middle two elements are deleted, the hash_multimap hm2 is: 1 16.
After the element with a key of 2 is deleted,
the hash_multimap hm3 is: 0 2 3.
The number of elements removed from hm3 is: 2.
After another element with a key equal to that of the
2nd element is deleted, the hash_multimap hm3 is: 0 3.
hash_multimap::find
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen Iterator zurück, der die erste Position eines Elements in einer hash_multimap adressiert, das einen Schlüssel aufweist, der einem angegebenen Schlüssel entspricht.
iterator find(const Key& key);
const_iterator find(const Key& key) const;
Parameter
key
Der Schlüssel, der mit dem Sortierschlüssel eines Elements aus der zu durchsuchenden hash_multimap übereinstimmt.
Rückgabewert
Ein Iterator, der den ersten Speicherort eines Elements mit einem angegebenen Schlüssel adressiert, oder der Speicherort, der dem letzten Element in der hash_multimap nachfolgt, wenn keine Übereinstimmung für den Schlüssel gefunden wird.
Hinweise
Die Memberfunktion gibt einen Iterator zurück, der ein Element in der hash_multimap adressiert, dessen Sortierschlüssel dem Argumentschlüssel unter einem binären Prädikat entspricht equivalent
, das eine Sortierung basierend auf einer Vergleichbarkeitsbeziehung auslöst.
Wenn der Rückgabewert find
einem const_iterator
zugewiesen wird, kann das hash_multimap-Objekt nicht geändert werden. Wenn der Rückgabewert find
eines iterator
Objekts zugewiesen ist, kann das hash_multimap-Objekt geändert werden.
Beispiel
// hash_multimap_find.cpp
// compile with: /EHsc
#include <iostream>
#include <hash_map>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
hash_multimap<int, int> :: const_iterator hm1_AcIter, hm1_RcIter;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 10));
hm1.insert(Int_Pair(2, 20));
hm1.insert(Int_Pair(3, 20));
hm1.insert(Int_Pair(3, 30));
hm1_RcIter = hm1.find(2);
cout << "The element of hash_multimap hm1 with a key of 2 is: "
<< hm1_RcIter -> second << "." << endl;
hm1_RcIter = hm1.find(3);
cout << "The first element of hash_multimap hm1 with a key of 3 is: "
<< hm1_RcIter -> second << "." << endl;
// If no match is found for the key, end() is returned
hm1_RcIter = hm1.find(4);
if (hm1_RcIter == hm1.end())
cout << "The hash_multimap hm1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of hash_multimap hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
// The element at a specific location in the hash_multimap can be
// found using a dereferenced iterator addressing the location
hm1_AcIter = hm1.end();
hm1_AcIter--;
hm1_RcIter = hm1.find(hm1_AcIter -> first);
cout << "The first element of hm1 with a key matching"
<< endl << "that of the last element is: "
<< hm1_RcIter -> second << "." << endl;
// Note that the first element with a key equal to
// the key of the last element is not the last element
if (hm1_RcIter == --hm1.end())
cout << "This is the last element of hash_multimap hm1."
<< endl;
else
cout << "This is not the last element of hash_multimap hm1."
<< endl;
}
The element of hash_multimap hm1 with a key of 2 is: 20.
The first element of hash_multimap hm1 with a key of 3 is: 20.
The hash_multimap hm1 doesn't have an element with a key of 4.
The first element of hm1 with a key matching
that of the last element is: 20.
This is not the last element of hash_multimap hm1.
hash_multimap::get_allocator
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt eine Kopie des Zuweisungsobjekts zurück, das zum Erstellen der hash_multimap verwendet wird.
Allocator get_allocator() const;
Rückgabewert
Die von der hash_multimap verwendete Zuweisung.
Hinweise
Zuweisungen für die hash_multimap-Klasse geben an, wie die Klasse einen Speicher verwaltet. Für die meisten Programmieranforderungen reichen die standardmäßigen allocator-Objekte mit Container-Klassen der C++-Standardbibliothek aus. Schreiben und Verwenden Ihrer eigener Zuweisungsklasse ist ein C++ -Thema für Fortgeschrittene.
Beispiel
// hash_multimap_get_allocator.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int>::allocator_type hm1_Alloc;
hash_multimap <int, int>::allocator_type hm2_Alloc;
hash_multimap <int, double>::allocator_type hm3_Alloc;
hash_multimap <int, int>::allocator_type hm4_Alloc;
// The following lines declare objects
// that use the default allocator.
hash_multimap <int, int> hm1;
hash_multimap <int, int> hm2;
hash_multimap <int, double> hm3;
hm1_Alloc = hm1.get_allocator( );
hm2_Alloc = hm2.get_allocator( );
hm3_Alloc = hm3.get_allocator( );
cout << "The number of integers that can be allocated"
<< endl << " before free memory is exhausted: "
<< hm2.max_size( ) << "." << endl;
cout << "The number of doubles that can be allocated"
<< endl << " before free memory is exhausted: "
<< hm3.max_size( ) << "." << endl;
// The following line creates a hash_multimap hm4
// with the allocator of hash_multimap hm1.
hash_multimap <int, int> hm4( less<int>( ), hm1_Alloc );
hm4_Alloc = hm4.get_allocator( );
// Two allocators are interchangeable if
// storage allocated from each can be
// deallocated by the other
if( hm1_Alloc == hm4_Alloc )
{
cout << "The allocators are interchangeable."
<< endl;
}
else
{
cout << "The allocators are not interchangeable."
<< endl;
}
}
hash_multimap::hash_multimap
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Erstellt ein hash_multimap-Element, das leer oder eine Kopie eines anderen vollständigen hash_multimap-Elements oder eines Teils davon ist.
hash_multimap();
explicit hash_multimap(
const Compare& Comp);
hash_multimap(
const Compare& Comp,
const Allocator& Al);
hash_multimap(
const hash_multimap& Right);
hash_multimap(
hash_multimap&& Right);
hash_multimap(
initializer_list<Type> IList);
hash_multimap(
initializer_list<Type> IList,
const Compare& Comp);
hash_multimap(
initializer_list<Type> IList,
const Compare& Comp,
const Allocator& Al);
template <class InputIterator>
hash_multimap(
InputIterator First,
InputIterator Last);
template <class InputIterator>
hash_multimap(
InputIterator First,
InputIterator Last,
const Compare& Comp);
template <class InputIterator>
hash_multimap(
InputIterator First,
InputIterator Last,
const Compare& Comp,
const Allocator& Al);
Parameter
Al
Die für dieses hash_multimap-Objekt zu verwendende Speicherreservierungsklasse, dessen Standard Allocator
ist.
Comp
Die Vergleichsfunktion vom Typ const Traits
, die verwendet wird, um die Elemente in der Zuordnung zu sortieren, deren Standard Traits
ist.
Right
Die Zuordnung, deren Kopie der erstellte Satz sein soll.
First
Die Position des ersten Elements in dem zu kopierenden Elementbereich.
Last
Die Position des ersten Elements nach dem zu kopierenden Elementbereich.
IList
Das initializer_list-Element, aus dem kopiert wird.
Hinweise
In allen Konstruktoren wird ein Zuweisungsobjekttyp gespeichert, mit dem der Arbeitsspeicher für das hash_multimap-Element verwaltet wird, und das später zurückgegeben werden kann, indem get_allocator aufgerufen wird. Der Zuweisungsparameter wird häufig aus den Klassendeklarationen und den Vorverarbeitungsmakros weggelassen, die zum Ersetzen alternativer Zuweisungen verwendet werden.
Alle Konstruktoren initialisieren ihrer hash_multimap-Elemente.
In allen Konstruktoren wird ein Funktionsobjekt vom Typ Traits
gespeichert, der verwendet wird, um unter den Schlüsseln des hash_multimap-Elements eine Sortierung vorzunehmen, und das später zurückgegeben werden kann, indem key_comp aufgerufen wird.
Die ersten drei Konstruktoren geben eine leere anfängliche hash_multimap an; die zweite gibt den Typ der Vergleichsfunktion (Comp) an, der verwendet werden soll, um die Reihenfolge der Elemente festzulegen, und der dritte explizit den zu verwendenden Allocatortyp (_Al
) an. Mit dem Schlüsselwort explicit
werden bestimmte Arten automatischer Typumwandlung unterdrückt.
Der vierte Konstruktor gibt eine Kopie des Right
-hash_multimap-Elements an.
Mit den nächsten drei Konstruktoren wird der First, Last)
-Bereich, einer Zuordnung kopiert, wobei sich die Explizitheit bei Angabe des Typs der Vergleichsfunktion der Klasse Traits
und "Allocator" erhöht.
Der achte Konstruktor verschiebt das hash_multimap-Element Right
.
Die letzten drei Konstruktoren verwenden ein initializer_list-Element.
hash_multimap::insert
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Fügt ein Element oder einen Elementbereich in ein hash_multimap-Element ein.
iterator insert(
const value_type& Val);
iterator insert(
const_iterator Where,
const value_type& Val);void insert(
initializer_list<value_type> IList);
template <class InputIterator>
void insert(
InputIterator First,
InputIterator Last);
template <class ValTy>
iterator insert(
ValTy&& Val);
template <class ValTy>
iterator insert(
const_iterator Where,
ValTy&& Val);
Parameter
Val
Der Wert eines in das hash_multimap-Element einzufügenden Elements, es sei denn, das Element ist bereits enthalten oder, üblicher, es sei denn, ein Element, dessen Schlüssel gleichwertig sortiert wird, ist bereits enthalten.
Where
Ein Hinweis darüber, wo mit der Suche nach den richtigen Einfügepunkt begonnen wird.
First
Die Position des ersten Elements, das aus einer Zuordnung kopiert werden soll.
Last
Die Position direkt über den letzten aus einer Zuordnung zu kopierenden Elements.
Rückgabewert
Die ersten zwei insert
-Memberfunktionen geben ein Iterator zurück, der auf den Speicherort zeigt, an dem das neue Element eingefügt wurde.
Die dritte Memberfunktion verwendet ein initializer_list-Element, damit die Elemente eingefügt werden können.
Die vierte Memberfunktion fügt die Sequenz von Elementwerten in eine Zuordnung ein, die jedem Element entspricht, das von einem Iterator im [First, Last)
-Bereich einer bestimmten Gruppe adressiert wird.
Die letzten zwei insert
-Memberfunktionen verhalten sich identisch zu den ersten beiden, außer dass der eingefügte Wert durch Verschiebung erstellt wird.
Hinweise
Der value_type eines Elements wird paarweise angegeben, sodass der Wert eines Elements ein sortiertes Paar ist, in dem die erste Komponente gleich dem Schlüsselwert und die zweite Komponente gleich dem Datenwert des Elements ist.
Das Einfügen kann in amortisierter Konstantenzeit für die Hint-Version von insert
, anstelle der logarithmischen Uhrzeit erfolgen, wenn die Einfügemarke unmittelbar auf Where folgt.
hash_multimap::iterator
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der einen bidirektionalen Iterator bereitstellt, mit dem jedes Element in einer hash_multimap gelesen oder geändert werden kann.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::iterator iterator;
Hinweise
Die iterator
durch hash_multimap definierten Punkte auf Objekte von value_type, die vom Typ pair
<"Const Key", "Type>", dessen erstes Element der Schlüssel zum Element ist und dessen zweites Element das zugeordnete Datum ist, das vom Element gehalten wird.
Verwenden Sie den ->
Operator, um einen Iterator Iter
abzuleiten, der auf ein Element in einem hash_multimap verweist.
Um auf den Wert des Schlüssels für das Element zuzugreifen, verwenden Sie Iter->first
die Entsprechende .(*Iter).first
Um auf den Wert des zugeordneten Datums für das Element zuzugreifen, verwenden Sie Iter->second
dies , was entspricht (*Iter).first
.
Ein Typ iterator
kann verwendet werden, um den Wert eines Elements zu ändern.
Beispiel
Im Beispiel für begin wird verdeutlicht, wie ein iterator
deklariert und verwendet wird.
hash_multimap::key_comp
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ruft eine Kopie des Vergleichsobjekts ab, das zum Sortieren der Schlüssel in einer hash_multimap verwendet wird.
key_compare key_comp() const;
Rückgabewert
Gibt das Funktionsobjekt zurück, das ein hash_multimap-Element zum Sortieren seiner Elemente verwendet.
Hinweise
Das gespeicherte Objekt definiert die Memberfunktion
bool operator( const Key& left, const Key& right );
gibt zurück true
, wenn left
sie vorangestellt ist und nicht gleich right
der Sortierreihenfolge ist.
Beispiel
// hash_multimap_key_comp.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int, hash_compare<int, less<int>>> hm1;
hash_multimap <int, int, hash_compare<int, less<int>>
>::key_compare kc1 = hm1.key_comp( ) ;
bool result1 = kc1( 2, 3 ) ;
if( result1 == true )
{
cout << "kc1( 2,3 ) returns value of true,\n"
<< "where kc1 is the function object of hm1.\n"
<< endl;
}
else
{
cout << "kc1( 2,3 ) returns value of false,\n"
<< "where kc1 is the function object of hm1.\n"
<< endl;
}
hash_multimap <int, int, hash_compare<int, greater<int>>> hm2;
hash_multimap <int, int, hash_compare<int, greater<int>>
>::key_compare kc2 = hm2.key_comp( );
bool result2 = kc2( 2, 3 ) ;
if( result2 == true )
{
cout << "kc2( 2,3 ) returns value of true,\n"
<< "where kc2 is the function object of hm2."
<< endl;
}
else
{
cout << "kc2( 2,3 ) returns value of false,\n"
<< "where kc2 is the function object of hm2."
<< endl;
}
}
hash_multimap::key_compare
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Eine Typ, der ein Funktionsobjekt bereitstellt, das zwei Sortierschlüssel vergleichen kann, um die relative Position von zwei Elementen in der multi_map zu bestimmen.
typedef Traits key_compare;
Hinweise
key_compare
ist ein Synonym für den Vorlagenparameter "Traits".
Weitere Informationen zu Traits finden Sie im Thema "hash_multimap Klasse ".
Beispiel
Im Beispiel für key_comp wird verdeutlicht, wie key_compare
deklariert und verwendet wird.
hash_multimap::key_type
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, mit dem das Sortierschlüsselobjekt beschrieben wird, das jedes Element der hash_multimap bildet.
typedef Key key_type;
Hinweise
key_type
ist ein Synonym für den Vorlagenparameter Key.
Weitere Informationen zu Key finden Sie im Abschnitt "Hinweise" des Themas "hash_multimap Klasse ".
Beispiel
Im Beispiel für value_type wird verdeutlicht, wie key_compare
deklariert und verwendet wird.
hash_multimap::lower_bound
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen Iterator zum ersten Element in einer hash_multimap mit einem Schlüssel zurück, der gleich oder größer als ein angegebener Schlüssel ist.
iterator lower_bound(const Key& key);
const_iterator lower_bound(const Key& key) const;
Parameter
key
Der Argumentschlüssel, der mit dem Sortierschlüssel eines Elements aus der zu durchsuchenden hash_multimap verglichen wird.
Rückgabewert
Ein Iterator oder const_iterator, der den Speicherort eines Elements in einer hash_multimap mit einem Schlüssel adressiert, der gleich oder größer als der Argumentschlüssel ist, oder der den Speicherort des nachfolgenden letzten Elements in der hash_multimap adressiert, wenn kein Treffer für den Schlüssel gefunden wird.
Wenn der Rückgabewert lower_bound
einem const_iterator
zugewiesen wird, kann das hash_multimap-Objekt nicht geändert werden. Wenn der Rückgabewert lower_bound
eines iterator
Objekts zugewiesen ist, kann das hash_multimap-Objekt geändert werden.
Hinweise
Beispiel
// hash_multimap_lower_bound.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_iterator hm1_AcIter,
hm1_RcIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_RcIter = hm1.lower_bound( 2 );
cout << "The element of hash_multimap hm1 with a key of 2 is: "
<< hm1_RcIter -> second << "." << endl;
hm1_RcIter = hm1.lower_bound( 3 );
cout << "The first element of hash_multimap hm1 with a key of 3 is: "
<< hm1_RcIter -> second << "." << endl;
// If no match is found for the key, end( ) is returned
hm1_RcIter = hm1.lower_bound( 4 );
if ( hm1_RcIter == hm1.end( ) )
cout << "The hash_multimap hm1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of hash_multimap hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
// The element at a specific location in the hash_multimap can be
// found using a dereferenced iterator addressing the location
hm1_AcIter = hm1.end( );
hm1_AcIter--;
hm1_RcIter = hm1.lower_bound( hm1_AcIter -> first );
cout << "The first element of hm1 with a key matching"
<< endl << "that of the last element is: "
<< hm1_RcIter -> second << "." << endl;
// Note that the first element with a key equal to
// the key of the last element is not the last element
if ( hm1_RcIter == --hm1.end( ) )
cout << "This is the last element of hash_multimap hm1."
<< endl;
else
cout << "This is not the last element of hash_multimap hm1."
<< endl;
}
The element of hash_multimap hm1 with a key of 2 is: 20.
The first element of hash_multimap hm1 with a key of 3 is: 20.
The hash_multimap hm1 doesn't have an element with a key of 4.
The first element of hm1 with a key matching
that of the last element is: 20.
This is not the last element of hash_multimap hm1.
hash_multimap::mapped_type
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der den in einer hash_multimap gespeicherten Datentyp darstellt.
typedef Type mapped_type;
Hinweise
mapped_type
ist ein Synonym für den Vorlagenparameter type.
Weitere Informationen zum Typ finden Sie im Thema "hash_multimap Klasse ".
Beispiel
Im Beispiel für value_type wird verdeutlicht, wie key_type
deklariert und verwendet wird.
hash_multimap::max_size
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt die Maximallänge der hash_multimap zurück.
size_type max_size() const;
Rückgabewert
Die mögliche Maximallänge der hash_multimap.
Hinweise
Beispiel
// hash_multimap_max_size.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: size_type i;
i = hm1.max_size( );
cout << "The maximum possible length "
<< "of the hash_multimap is " << i << "." << endl;
}
hash_multimap::operator=
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ersetzt die Elemente der hash_multimap durch eine Kopie einer anderen.
hash_multimap& operator=(const hash_multimap& right);
hash_multimap& operator=(hash_multimap&& right);
Parameter
right
Die hash_multimap, die in die hash_multimap
kopiert wird.
Hinweise
Nach dem Löschen vorhandener Elemente in einer hash_multimap
, operator=
entweder kopiert oder verschiebt den Inhalt von rechts in die hash_multimap
.
Beispiel
// hash_multimap_operator_as.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> v1, v2, v3;
hash_multimap<int, int>::iterator iter;
v1.insert(pair<int, int>(1, 10));
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << iter->second << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = move(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
}
hash_multimap::p ointer
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der einen Zeiger auf ein Element in einer hash_multimap bereitstellt.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::pointer pointer;
Hinweise
Ein Typ pointer
kann verwendet werden, um den Wert eines Elements zu ändern.
In den meisten Fällen sollte ein Iterator für den Zugriff auf Elemente in einem hash_multimap-Objekt verwendet werden.
hash_multimap::rbegin
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen Iterator zurück, der das erste Element in einer umgekehrten hash_multimap adressiert.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Rückgabewert
Ein umgekehrter bidirektionaler Iterator, mit dem das erste Element in einer umgekehrten hash_multimap adressiert wird, bzw. mit dem das ehemals letzte Element in der nicht umgekehrten hash_multimap adressiert wird.
Hinweise
rbegin
wird bei einer umgekehrten hash_multimap auf die gleiche Weise verwendet wie begin mit einer hash_multimap.
Wenn der Rückgabewert rbegin
einem const_reverse_iterator
zugewiesen wird, kann das hash_multimap-Objekt anschließend nicht geändert werden. Wenn der Rückgabewert rbegin
einem reverse_iterator
zugewiesen wird, kann das hash_multimap-Objekt anschließend geändert werden.
rbegin
kann verwendet werden, um eine hash_multimap rückwärts zu durchlaufen.
Beispiel
// hash_multimap_rbegin.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: iterator hm1_Iter;
hash_multimap <int, int> :: reverse_iterator hm1_rIter;
hash_multimap <int, int> :: const_reverse_iterator hm1_crIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_rIter = hm1.rbegin( );
cout << "The first element of the reversed hash_multimap hm1 is "
<< hm1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a hash_multimap in a forward order
cout << "The hash_multimap is: ";
for ( hm1_Iter = hm1.begin( ) ; hm1_Iter != hm1.end( ); hm1_Iter++)
cout << hm1_Iter -> first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a hash_multimap in a reverse order
cout << "The reversed hash_multimap is: ";
for ( hm1_rIter = hm1.rbegin( ) ; hm1_rIter != hm1.rend( ); hm1_rIter++)
cout << hm1_rIter -> first << " ";
cout << "." << endl;
// A hash_multimap element can be erased by dereferencing its key
hm1_rIter = hm1.rbegin( );
hm1.erase ( hm1_rIter -> first );
hm1_rIter = hm1.rbegin( );
cout << "After the erasure, the first element\n"
<< "in the reversed hash_multimap is "
<< hm1_rIter -> first << "." << endl;
}
The first element of the reversed hash_multimap hm1 is 3.
The hash_multimap is: 1 2 3 .
The reversed hash_multimap is: 3 2 1 .
After the erasure, the first element
in the reversed hash_multimap is 2.
hash_multimap::reference
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der einen Verweis auf einer hash_multimap gespeichertes Element bereitstellt.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::reference reference;
Hinweise
Beispiel
// hash_multimap_reference.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
// Declare and initialize a const_reference &Ref1
// to the key of the first element
const int &Ref1 = ( hm1.begin( ) -> first );
// The following line would cause an error as the
// non-const_reference cannot be used to access the key
// int &Ref1 = ( hm1.begin( ) -> first );
cout << "The key of first element in the hash_multimap is "
<< Ref1 << "." << endl;
// Declare and initialize a reference &Ref2
// to the data value of the first element
int &Ref2 = ( hm1.begin( ) -> second );
cout << "The data value of first element in the hash_multimap is "
<< Ref2 << "." << endl;
//The non-const_reference can be used to modify the
//data value of the first element
Ref2 = Ref2 + 5;
cout << "The modified data value of first element is "
<< Ref2 << "." << endl;
}
The key of first element in the hash_multimap is 1.
The data value of first element in the hash_multimap is 10.
The modified data value of first element is 15.
hash_multimap::rend
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen Iterator zurück, der den Speicherort adressiert, der auf das letzte Element einer umgekehrten hash_multimap folgt.
const_reverse_iterator rend() const;
reverse_iterator rend();
Rückgabewert
Ein umgekehrter bidirektionaler Iterator, der den Standort anspricht, der auf das letzte Element in einer umgekehrten hash_multimap folgt (der Speicherort, der dem ersten Element in der nicht umgekehrten hash_multimap vorangegangen war).
Hinweise
rend
wird bei einer umgekehrten hash_multimap auf die gleiche Weise verwendet wie end mit einer hash_multimap.
Wenn der Rückgabewert von rend
einem const_reverse_iterator zugewiesen wird, kann das hash_multimap-Objekt anschließend nicht geändert werden. Wenn der Rückgabewert von rend
einem reverse_iterator zugewiesen wird, kann das hash_multimap-Objekt anschließend geändert werden.
rend
kann verwendet werden, um zu testen, ob ein umgekehrter Iterator das Ende seiner hash_multimap erreicht hat.
Der von rend
zurückgegebene Wert darf nicht dereferenziert werden.
Beispiel
// hash_multimap_rend.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: iterator hm1_Iter;
hash_multimap <int, int> :: reverse_iterator hm1_rIter;
hash_multimap <int, int> :: const_reverse_iterator hm1_crIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_rIter = hm1.rend( );
hm1_rIter--;
cout << "The last element of the reversed hash_multimap hm1 is "
<< hm1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a hash_multimap in a forward order
cout << "The hash_multimap is: ";
for ( hm1_Iter = hm1.begin( ) ; hm1_Iter != hm1.end( ); hm1_Iter++)
cout << hm1_Iter -> first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a hash_multimap in a reverse order
cout << "The reversed hash_multimap is: ";
for ( hm1_rIter = hm1.rbegin( ) ; hm1_rIter != hm1.rend( ); hm1_rIter++)
cout << hm1_rIter -> first << " ";
cout << "." << endl;
// A hash_multimap element can be erased by dereferencing its key
hm1_rIter = --hm1.rend( );
hm1.erase ( hm1_rIter -> first );
hm1_rIter = hm1.rend( );
hm1_rIter--;
cout << "After the erasure, the last element "
<< "in the reversed hash_multimap is "
<< hm1_rIter -> first << "." << endl;
}
The last element of the reversed hash_multimap hm1 is 1.
The hash_multimap is: 1 2 3 .
The reversed hash_multimap is: 3 2 1 .
After the erasure, the last element in the reversed hash_multimap is 2.
hash_multimap::reverse_iterator
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der einen bidirektionalen Iterator bereitstellt, mit dem ein Element in einer umgekehrten hash_multimap gelesen oder geändert werden kann.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::reverse_iterator reverse_iterator;
Hinweise
Ein reverse_iterator
-Typ wird verwendet, um die multi_map in umgekehrter Reihenfolge zu durchlaufen.
Die reverse_iterator
durch hash_multimap definierten Punkte auf Objekte von value_type, die vom Typ pair
<"Schlüssel, Typ>" sind. Der Wert des Schlüssels ist durch das erste Memberpaar verfügbar, und der Wert des zugeordneten Elements durch das zweite Memberpaar.
Beispiel
Im Beispiel für rbegin wird verdeutlicht, wie ein reverse_iterator
deklariert und verwendet wird.
hash_multimap::size
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt die Anzahl von Elementen in hash_multimap zurück.
size_type size() const;
Rückgabewert
Die aktuelle Länge von hash_multimap.
Hinweise
Beispiel
Im folgenden Beispiel wird die Verwendung der Memberfunktion „hash_multimap::size“ gezeigt.
// hash_multimap_size.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1, hm2;
hash_multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 1));
i = hm1.size();
cout << "The hash_multimap length is " << i << "." << endl;
hm1.insert(Int_Pair(2, 4));
i = hm1.size();
cout << "The hash_multimap length is now " << i << "." << endl;
}
The hash_multimap length is 1.
The hash_multimap length is now 2.
hash_multimap::size_type
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Ganzzahltyp ohne Vorzeichen, der die Anzahl von Elementen in einer hash_multimap zählt.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::size_type size_type;
Hinweise
Beispiel
Im Beispiel für size wird verdeutlicht, wie ein size_type
deklariert und verwendet wird.
hash_multimap::swap
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Tauscht die Elemente zweier hash_multimaps aus.
void swap(hash_multimap& right);
Parameter
right
Die hash_multimap, in der die auszutauschenden Elemente bereitgestellt werden, oder die hash_multimap, deren Elemente mit denen der hash_multimap ausgetauscht werden sollen.
Hinweise
Die Memberfunktion macht keine Verweise, Zeiger oder Iteratoren ungültig, die Elemente in zwei hash_multimaps bezeichnen, deren Elemente ausgetauscht werden.
Beispiel
// hash_multimap_swap.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1, hm2, hm3;
hash_multimap <int, int>::iterator hm1_Iter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm2.insert ( Int_Pair ( 10, 100 ) );
hm2.insert ( Int_Pair ( 20, 200 ) );
hm3.insert ( Int_Pair ( 30, 300 ) );
cout << "The original hash_multimap hm1 is:";
for ( hm1_Iter = hm1.begin( ); hm1_Iter != hm1.end( ); hm1_Iter++ )
cout << " " << hm1_Iter -> second;
cout << "." << endl;
// This is the member function version of swap
hm1.swap( hm2 );
cout << "After swapping with hm2, hash_multimap hm1 is:";
for ( hm1_Iter = hm1.begin( ); hm1_Iter != hm1.end( ); hm1_Iter++ )
cout << " " << hm1_Iter -> second;
cout << "." << endl;
// This is the specialized template version of swap
swap( hm1, hm3 );
cout << "After swapping with hm3, hash_multimap hm1 is:";
for ( hm1_Iter = hm1.begin( ); hm1_Iter != hm1.end( ); hm1_Iter++ )
cout << " " << hm1_Iter -> second;
cout << "." << endl;
}
The original hash_multimap hm1 is: 10 20 30.
After swapping with hm2, hash_multimap hm1 is: 100 200.
After swapping with hm3, hash_multimap hm1 is: 300.
hash_multimap::upper_bound
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Gibt einen Iterator zum ersten Element in einer hash_multimap mit einem Schlüssel zurück, der größer als ein angegebener Schlüssel ist.
iterator upper_bound(const Key& key);
const_iterator upper_bound(const Key& key) const;
Parameter
key
Der Argumentschlüssel, der mit dem Sortierschlüssel eines Elements aus der zu durchsuchenden hash_multimap verglichen wird.
Rückgabewert
Ein Iterator oder const_iterator, der den Speicherort eines Elements in einer hash_multimap mit einem Schlüssel adressiert, der größer als der Argumentschlüssel ist, oder der den Speicherort des nachfolgenden letzten Elements in der hash_multimap adressiert, wenn kein Treffer für den Schlüssel gefunden wird.
Wenn der Rückgabewert upper_bound
einem const_iterator
zugewiesen wird, kann das hash_multimap-Objekt nicht geändert werden. Wenn der Rückgabewert upper_bound
eines iterator
Objekts zugewiesen ist, kann das hash_multimap-Objekt geändert werden.
Hinweise
Beispiel
// hash_multimap_upper_bound.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_iterator hm1_AcIter, hm1_RcIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1.insert ( Int_Pair ( 3, 40 ) );
hm1_RcIter = hm1.upper_bound( 1 );
cout << "The 1st element of hash_multimap hm1 with "
<< "a key greater than 1 is: "
<< hm1_RcIter -> second << "." << endl;
hm1_RcIter = hm1.upper_bound( 2 );
cout << "The first element of hash_multimap hm1\n"
<< "with a key greater than 2 is: "
<< hm1_RcIter -> second << "." << endl;
// If no match is found for the key, end( ) is returned
hm1_RcIter = hm1.lower_bound( 4 );
if ( hm1_RcIter == hm1.end( ) )
cout << "The hash_multimap hm1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of hash_multimap hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
// The element at a specific location in the hash_multimap can be
// found using a dereferenced iterator addressing the location
hm1_AcIter = hm1.begin( );
hm1_RcIter = hm1.upper_bound( hm1_AcIter -> first );
cout << "The first element of hm1 with a key greater than"
<< endl << "that of the initial element of hm1 is: "
<< hm1_RcIter -> second << "." << endl;
}
The 1st element of hash_multimap hm1 with a key greater than 1 is: 20.
The first element of hash_multimap hm1
with a key greater than 2 is: 30.
The hash_multimap hm1 doesn't have an element with a key of 4.
The first element of hm1 with a key greater than
that of the initial element of hm1 is: 20.
hash_multimap::value_comp
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Die Memberfunktion gibt ein Funktionsobjekt zurück, das die Reihenfolge der Elemente in einer hash_multimap bestimmt, indem ihre Schlüsselwerte verglichen werden.
value_compare value_comp() const;
Rückgabewert
Gibt das Vergleichsfunktionsobjekt zurück, das ein hash_multimap-Element zum Sortieren seiner Elemente verwendet.
Hinweise
Wenn für ein hash_multimap m zwei Elemente e1 (k1, d1) und e2(k2, d2) Objekte vom Typ value_type sind, wobei k1 und k2 ihre Schlüssel vom Typ key_type und d1 und d2 sind, sind ihre Daten vom Typ mapped_type, dann entspricht m.key_comp()(k1, k2)
es m.value_comp()(e1, e2)
. Ein gespeichertes Objekt definiert die Memberfunktion
bool operator( value_type& left, value_type& right);
gibt zurück true
, wenn der Schlüsselwert vorangestellter left
Wert ist und nicht dem Schlüsselwert right
in der Sortierreihenfolge entspricht.
Beispiel
// hash_multimap_value_comp.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int, hash_compare<int, less<int>>> hm1;
hash_multimap <int, int, hash_compare<int, less<int>>
>::value_compare vc1 = hm1.value_comp( );
hash_multimap <int,int>::iterator Iter1, Iter2;
Iter1= hm1.insert ( hash_multimap <int, int> :: value_type ( 1, 10 ) );
Iter2= hm1.insert ( hash_multimap <int, int> :: value_type ( 2, 5 ) );
if( vc1( *Iter1, *Iter2 ) == true )
{
cout << "The element ( 1,10 ) precedes the element ( 2,5 )."
<< endl;
}
else
{
cout << "The element ( 1,10 ) does "
<< "not precede the element ( 2,5 )."
<< endl;
}
if( vc1( *Iter2, *Iter1 ) == true )
{
cout << "The element ( 2,5 ) precedes the element ( 1,10 )."
<< endl;
}
else
{
cout << "The element ( 2,5 ) does "
<< "not precede the element ( 1,10 )."
<< endl;
}
}
hash_multimap::value_type
Hinweis
Diese API ist veraltet. Die Alternative ist die unordered_multimap-Klasse.
Ein Typ, der den Typ des Objekts angibt, das in einer hash_multimap gespeichert wird.
typedef pair<const Key, Type> value_type;
Hinweise
value_type
wird als Kopplungskonst key_type, mapped_type> und nicht als Kopplung<key_type deklariert, mapped_type>, da die Schlüssel eines assoziativen Containers möglicherweise nicht mit einem nicht zusammenhängenden Iterator oder Verweis geändert werden.<
Beispiel
// hash_multimap_value_type.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
typedef pair <const int, int> cInt2Int;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: key_type key1;
hash_multimap <int, int> :: mapped_type mapped1;
hash_multimap <int, int> :: value_type value1;
hash_multimap <int, int> :: iterator pIter;
// value_type can be used to pass the correct type
// explicitly to avoid implicit type conversion
hm1.insert ( hash_multimap <int, int> :: value_type ( 1, 10 ) );
// Compare another way to insert objects into a hash_multimap
hm1.insert ( cInt2Int ( 2, 20 ) );
// Initializing key1 and mapped1
key1 = ( hm1.begin( ) -> first );
mapped1 = ( hm1.begin( ) -> second );
cout << "The key of first element in the hash_multimap is "
<< key1 << "." << endl;
cout << "The data value of first element in the hash_multimap is "
<< mapped1 << "." << endl;
// The following line would cause an error because
// the value_type is not assignable
// value1 = cInt2Int ( 4, 40 );
cout << "The keys of the mapped elements are:";
for ( pIter = hm1.begin( ) ; pIter != hm1.end( ) ; pIter++ )
cout << " " << pIter -> first;
cout << "." << endl;
cout << "The values of the mapped elements are:";
for ( pIter = hm1.begin( ) ; pIter != hm1.end( ) ; pIter++ )
cout << " " << pIter -> second;
cout << "." << endl;
}
The key of first element in the hash_multimap is 1.
The data value of first element in the hash_multimap is 10.
The keys of the mapped elements are: 1 2.
The values of the mapped elements are: 10 20.
Siehe auch
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz