Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Speichert Daten und ruft sie schnell aus einer Auflistung ab, in der jedes Element ein Paar ist, das einen Sortierschlüssel aufweist, dessen Wert eindeutig und ein zugeordneter Datenwert ist.
Syntax
template <class Key,
class Type,
class Traits=hash_compare<Key, less<Key>>,
class Allocator=allocator<pair <const Key, Type>>>
class hash_map
Parameter
Key
Der Schlüsseldatentyp, der in der hash_mapDatei gespeichert werden soll.
Type
Der in hash_map zu speichernde Elementdatentyp.
Traits
Der Typ, der zwei Funktionsobjekte enthält, einer der Klassenabgleiche, die zwei Elementwerte als Sortierschlüssel vergleichen können, um ihre relative Reihenfolge und eine Hashfunktion zu bestimmen, bei der es sich um einen unären Prädikatzuordnungsschlüsselwerte der Elemente handelt, um nicht signierte ganzzahlen des Typs size_tzu bestimmen. Dieses Argument ist optional und hash_compare<Key, less<Key>> der Standardwert.
Allocator
Der Typ, der das gespeicherte Allocatorobjekt darstellt, das Details zur hash_mapZuordnung und Zuordnung des Speichers kapselt. Dieses Argument ist optional, und der Standardwert ist allocator<pair <const Key, Type>>.
Hinweise
Für den hash_map gilt Folgendes:
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.
Insofern eindeutig, da jedes der Elemente einen eindeutigen Schlüssel aufweisen muss.
Ein Paar assoziativer Container, da sich die Elementdatenwerte 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_map, aber nicht dessen zugeordnetem Schlüsselwert kann direkt geändert werden. 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).
Dies hash_map sollte der assoziative Container der Wahl sein, wenn die Bedingungen, die die Werte mit ihren Schlüsseln verknüpfen, von der Anwendung erfüllt werden. Ein Modell für diesen Strukturtyp ist eine geordnete Liste eindeutig auftretender Schlüsselwörter mit zugeordneten Zeichenfolgewerten, die etwa Definitionen bereitstellen. Wenn die Wörter stattdessen mehr als eine richtige Definition hatten, sodass Schlüssel nicht eindeutig waren, wäre ein hash_multimap Container der Wahl. Wenn dagegen nur die Liste der Wörter gespeichert wurde, wäre ein hash_set Container der richtige. Wenn mehrere Vorkommen der Wörter zulässig wären, wäre eine hash_multiset die entsprechende Containerstruktur.
Die hash_map Reihenfolge, die sie steuert, wird durch Aufrufen eines gespeicherten Hashobjekts Traits der Klasse value_comparesortiert. Auf dieses gespeicherte Objekt kann durch Aufrufen der Memberfunktion key_compzugegriffen werden. Ein solches Funktionsobjekt muss sich wie ein Objekt der Klasse hash_compare<Key, less<Key>>verhalten. Insbesondere für alle Werte Key des Typs Keyliefert der Aufruf Traits(Key) eine Verteilung von Werten vom Typ size_t. Weitere Informationen finden Sie unter hash_compare.
Im Allgemeinen müssen die Elemente nur kleiner als vergleichbar sein, um diese Reihenfolge festzulegen: sodass aufgrund von zwei Elementen entweder festgestellt werden kann, dass sie gleichwertig sind (im Sinne, dass keines kleiner als der andere ist) oder dass ein Element kleiner als der 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 für eine ist hash_map eine strenge schwache Reihenfolge, wenn das binäre Prädikat irreflexiv, antisymmetrisch und transitiv ist und wenn Äquivalenz transitiv ist, wobei zwei Objekte xy und definiert sind, die gleich sind, wenn sowohl f(x, y) als auch f(y, x) sind false. 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. Sie können die aktuelle Größe der Hashtabelle nicht ermitteln, sodass Sie die Reihenfolge der Elemente in der kontrollierten Sequenz nicht im Allgemeinen vorhersagen können. 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 der hash_map Klasse bereitgestellte Iterator ist ein bidirektionaler Iterator, aber die Klassenmemberfunktionen insert und hash_map verfügen über Versionen, die als Vorlagenparameter einen schwächeren Eingabe-Iterator verwenden, dessen Funktionalitätsanforderungen minimaler 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 eigenen Satz 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. Dies ist ein minimaler Satz von Funktionen, aber es reicht aus, sinnvoll über einen Bereich von Iteratoren [First, Last) im Kontext der Klassenmemberfunktionen zu sprechen.
Konstruktoren
| Konstruktor | Beschreibung |
|---|---|
hash_map |
Erstellt ein hash_map-Element, das leer oder die Kopie eines ganzen anderen hash_map-Elements oder eines Teils davon ist. |
TypeDefs
| Typname | Beschreibung |
|---|---|
allocator_type |
Ein Typ, der die allocator-Klassentyp für das hash_map-Objekt darstellt. |
const_iterator |
Ein Typ, der einen bidirektionalen Iterator bereitstellt, der im const-Element ein hash_map-Element lesen kann. |
const_pointer |
Ein Typ, der einen Zeiger auf ein const-Element in einem hash_map-Element bereitstellt. |
const_reference |
Ein Typ, der einen Verweis auf ein const-Element bereitstellt, das in einem hash_map-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_map-Element lesen kann. |
difference_type |
Ein Ganzzahltyp mit Vorzeichen, der dazu verwendet werden kann, die Anzahl von Elementen eines hash_map-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_map 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_map-Element zu bestimmen. |
key_type |
Ein Typ beschreibt das Sortierschlüsselobjekt, das jedes Element von hash_map bildet. |
mapped_type |
Ein Typ, der den in einer hash_map gespeicherten Datentyp darstellt. |
pointer |
Ein Typ, der einen Zeiger auf ein Element in einer hash_map bereitstellt. |
reference |
Ein Typ, der einen Verweis auf ein in einer hash_map gespeichertes Element bereitstellt. |
reverse_iterator |
Ein Typ, der einen bidirektionalen Iterator bereitstellt, mit dem ein Element in einem umgekehrten hash_map-Element gelesen oder geändert werden kann. |
size_type |
Eine Ganzzahltyp ohne Vorzeichen, der die Anzahl von Elementen in hash_map darstellen kann. |
value_type |
Eine Typ, der ein Funktionsobjekt bereitstellt, das zwei Elemente als Sortierschlüssel vergleichen kann, um die relative Position im hash_map-Element zu bestimmen. |
Memberfunktionen
| Memberfunktion | Beschreibung |
|---|---|
at |
Sucht ein Element in der hash_map mit einem angegebenen Schlüsselwert. |
begin |
Gibt ein Iterator zurück, der das erste Element im hash_map-Element adressiert. |
cbegin |
Gibt einen konstanten Iterator zurück, der das erste Element im hash_map-Element adressiert. |
cend |
Gibt einen konstanten Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines hash_map-Elements nachfolgt. |
clear |
Löscht alle Elemente einer hash_map auf. |
count |
Gibt die Anzahl von Elementen in einem hash_map-Element zurück, dessen Schlüssel dem von einem Parameter angegebenen Schlüssel entspricht. |
crbegin |
Gibt einen const Iterator zurück, der das erste Element in einem umgekehrten Element adressiert hash_map. |
crend |
Gibt einen const Iterator zurück, der die Position adressiert, die das letzte Element in einem umgekehrten Element erfolgreich war hash_map. |
emplace |
Fügt ein Element ein, das vor Ort in ein hash_map-Element erstellt wird. |
emplace_hint |
Fügt ein Element ein, das vor Ort mit einem Platzierungshinweis in ein hash_map-Element erstellt wird. |
empty |
Testet, ob ein hash_map-Element leer ist. |
end |
Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element einem hash_map-Element nachfolgt. |
equal_range |
Gibt ein Iteratorpaar jeweils zum ersten Element in einem hash_map-Element mit einem Schlüssel zurück, der größer als ein bestimmter Schlüssel ist, bzw. zum ersten Element im hash_map-Element mit einem Schlüssel, der größer oder gleich dem Schlüssel ist. |
erase |
Entfernt ein Element oder eine Reihe von Elementen in einer hash_map aus angegebenen Speicherorten. |
find |
Gibt einen Iterator zurück, der die Position eines Elements in einem hash_map-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_map-Objekts zurück. |
insert |
Fügt ein Element oder einen Elementbereich in ein hash_map-Element ein. |
key_comp |
Gibt einen Iterator zum ersten Element in einem hash_map-Element mit einem Schlüsselwert zurück, der gleich oder größer ist, als ein angegebener Schlüssel. |
lower_bound |
Gibt einen Iterator zum ersten Element in einem hash_map-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_map zurück. |
rbegin |
Gibt einen Iterator zurück, der das erste Element in einem umgekehrten hash_map-Element adressiert. |
rend |
Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines umgekehrten hash_map-Elements nachfolgt. |
size |
Gibt die Anzahl von Elementen in der hash_map zurück. |
swap |
Tauscht die Elemente zweier hash_mapn. |
upper_bound |
Gibt einen Iterator zum ersten Element in einem hash_map-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_map verwendet wird. |
Operatoren
| Bediener | Beschreibung |
|---|---|
operator[] |
Fügt ein Element in ein hash_map-Element mit einem angegebenen Schlüsselwert ein. |
hash_map::operator= |
Ersetzt die Elemente eines hash_map-Elements durch eine Kopie eines anderen hash_map-Elements. |
Anforderungen
Kopfball:<hash_map>
Namespace:stdext
hash_map::allocator_type
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der die Zuweisungsklasse für das hash_map-Objekt darstellt.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::allocator_type allocator_type;
Beispiel
Siehe Beispiel für get_allocator ein Beispiel für die Verwendung von allocator_type.
hash_map::at
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Sucht ein Element in der hash_map mit einem angegebenen Schlüsselwert.
Type& at(const Key& key);
const Type& at(const Key& key) const;
Parameter
key
Der Schlüsselwert des zu suchenden Elements.
Rückgabewert
Ein Verweis auf den Datenwert des gefundenen Elements.
Hinweise
Wenn der Argumentschlüsselwert nicht gefunden wird, löst die Funktion ein Objekt der Klassenklasse out_of_rangeaus.
Beispiel
// hash_map_at.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
typedef pair <const int, int> cInt2Int;
hash_map <int, int> hm1;
// Insert data values
hm1.insert ( cInt2Int ( 1, 10 ) );
hm1.insert ( cInt2Int ( 2, 20 ) );
hm1.insert ( cInt2Int ( 3, 30 ) );
cout << "The values of the mapped elements are:";
for ( int i = 1 ; i <= hm1.size() ; i++ )
cout << " " << hm1.at(i);
cout << "." << endl;
}
hash_map::begin
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt ein Iterator zurück, der das erste Element im hash_map-Element adressiert.
const_iterator begin() const;
iterator begin();
Rückgabewert
Ein bidirektionaler Iterator, der das erste Element in der oder an der Position angibt, an der hash_map ein leerer Text ausgeführt hash_mapwird.
Beispiel
// hash_map_begin.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <int, int> :: iterator hm1_Iter;
hash_map <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_map::cbegin
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen konstanten Iterator zurück, der das erste Element im hash_map-Element adressiert.
const_iterator cbegin() const;
Rückgabewert
Ein paralleler bidirektionaler Iterator, der das erste Element in der oder der Position angibt, an der hash_map ein leeres Element ausgeführt hash_mapwird.
Beispiel
// hash_map_cbegin.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <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_map::cend
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen konstanten Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines hash_map-Elements nachfolgt.
const_iterator cend() const;
Rückgabewert
Ein paralleler bidirektionaler Iterator, der die Position angibt, die das letzte Element in einem hash_map. Wenn die hash_map leer ist, gilt anschließend hash_map::cend == hash_map::begin.
Hinweise
cend wird verwendet, um zu testen, ob ein Iterator das Ende seines hash_map erreicht hat.
Der zurückgegebene cend Wert sollte nicht abgeleitet werden.
Beispiel
// hash_map_cend.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <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_map::clear
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Löscht alle Elemente einer hash_map auf.
void clear();
Beispiel
Im folgenden Beispiel wird die Verwendung der hash_map::clear Memberfunktion veranschaulicht.
// hash_map_clear.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map<int, int> hm1;
hash_map<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_map is initially "
<< i << "." << endl;
hm1.clear();
i = hm1.size();
cout << "The size of the hash_map after clearing is "
<< i << "." << endl;
}
The size of the hash_map is initially 2.
The size of the hash_map after clearing is 0.
hash_map::const_iterator
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der einen bidirektionalen Iterator bereitstellt, der im const-Element ein hash_map-Element lesen kann.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::const_iterator const_iterator;
Hinweise
Ein Typ const_iterator kann nicht verwendet werden, um den Wert eines Elements zu ändern.
Die const_iterator durch Punkte definierten hash_map Elemente, bei denen es sich um Objekte vom value_typeTyp pair< const Key, Type >handelt , deren 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 const_iterator Operator, um ein cIterhash_map Element in einem ->Element abzuleiten.
Um auf den Wert des Schlüssels für das Element zuzugreifen, verwenden Sie cIter->firstdie Entsprechende .(*cIter).first Um auf den Wert des zugeordneten Datums für das Element zuzugreifen, verwenden Sie cIter->seconddies , was entspricht (*cIter).second.
Beispiel
Siehe Beispiel für begin ein Beispiel für die Verwendung von const_iterator.
hash_map::const_pointer
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der einen Zeiger auf ein const-Element in einem hash_map-Element bereitstellt.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::const_pointer const_pointer;
Hinweise
Ein Typ const_pointer kann nicht verwendet werden, um den Wert eines Elements zu ändern.
In den meisten Fällen sollte ein iterator Objekt verwendet werden, um auf die Elemente in einem hash_map Objekt zuzugreifen.
hash_map::const_reference
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der einen Verweis auf ein const-Element bereitstellt, das in einem hash_map-Element 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;
Beispiel
// hash_map_const_ref.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map<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 the first element in the hash_map 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 the first element in the hash_map is "
<< Ref2 << "." << endl;
}
The key of the first element in the hash_map is 1.
The data value of the first element in the hash_map is 10.
hash_map::const_reverse_iterator
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der einen bidirektionalen Iterator bereitstellt, der im const-Element jedes hash_map-Element lesen kann.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::const_reverse_iterator const_reverse_iterator;
Hinweise
Ein Typ const_reverse_iterator kann den Wert eines Elements nicht ändern und wird zum Durchlaufen des hash_map umgekehrten Elements verwendet.
Die const_reverse_iterator durch Punkte definierten hash_map Elemente, bei denen es sich um Objekte vom value_typeTyp pair< const Key, Type >handelt , deren 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 const_reverse_iterator Operator, um ein crIterhash_map Element in einem ->Element abzuleiten.
Um auf den Wert des Schlüssels für das Element zuzugreifen, verwenden Sie crIter->firstdie Entsprechende .(*crIter).first Um auf den Wert des zugeordneten Datums für das Element zuzugreifen, verwenden Sie crIter->seconddies , was entspricht (*crIter).first.
Beispiel
Ein Beispiel für rend das Deklarieren und Verwenden der const_reverse_iteratorDatei finden Sie im Beispiel.
hash_map::count
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt die Anzahl von Elementen in einem hash_map-Element zurück, dessen Schlüssel dem von einem Parameter angegebenen Schlüssel entspricht.
size_type count(const Key& key) const;
Parameter
key
Der Schlüsselwert der Elemente, die mit dem hash_mapElement abgeglichen werden sollen.
Rückgabewert
1, wenn das hash_map Element ein Element enthält, dessen Sortierschlüssel mit dem Parameterschlüssel übereinstimmt; 0, wenn das hash_map Element kein Element mit einem übereinstimmenden Schlüssel enthält.
Hinweise
Die Memberfunktion gibt die Anzahl der Elemente x im Bereich zurück.
lower_bound(key), upper_bound(key)
dies ist 0 oder 1 im Fall von hash_map, bei dem es sich um einen eindeutigen assoziativen Container handelt.
Beispiel
Im folgenden Beispiel wird die Verwendung der hash_map::count Memberfunktion veranschaulicht.
// hash_map_count.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main()
{
using namespace std;
using namespace stdext;
hash_map<int, int> hm1;
hash_map<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));
// Keys must be unique in hash_map, so duplicates are ignored
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: 1.
The number of elements in hm1 with a sort key of 2 is: 1.
The number of elements in hm1 with a sort key of 3 is: 0.
hash_map::crbegin
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen const Iterator zurück, der das erste Element in einem umgekehrten Element adressiert hash_map.
const_reverse_iterator crbegin() const;
Rückgabewert
Ein const umgekehrter bidirektionaler Iterator, der das erste Element in einer umgekehrten hash_map Oder adressiert, was das letzte Element in der unreversierten hash_map.
Hinweise
crbegin wird mit einem umgekehrten hash_map verwendet, genau wie begin bei einem hash_map.
Mit dem Rückgabewert des crbeginObjekts kann das hash_map Objekt nicht geändert werden.
Mit crbegin kann ein hash_map rückwärts durchlaufen werden.
Beispiel
// hash_map_crbegin.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <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_map hm1 is "
<< hm1_crIter -> first << "." << endl;
}
The first element of the reversed hash_map hm1 is 3.
hash_map::crend
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen const Iterator zurück, der die Position adressiert, die das letzte Element in einem umgekehrten Element erfolgreich war hash_map.
const_reverse_iterator crend() const;
Rückgabewert
Ein const umgekehrter bidirektionaler Iterator, der die Position adressiert, die das letzte Element in einem umgekehrten hash_map Element erfolgreich war (die Position, die dem ersten Element in der unreversierten hash_mapSeite vorausging).
Hinweise
crend wird mit einem umgekehrten hash_map verwendet, genau wie hash_map::end bei einem hash_map.
Mit dem Rückgabewert des crendObjekts kann das hash_map Objekt nicht geändert werden.
crend kann verwendet werden, um zu testen, ob das Ende der hash_map von einem umgekehrten Iterator erreicht wurde.
Der zurückgegebene crend Wert sollte nicht abgeleitet werden.
Beispiel
// hash_map_crend.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <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_map hm1 is "
<< hm1_crIter -> first << "." << endl;
}
The last element of the reversed hash_map hm1 is 3.
hash_map::difference_type
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Ganzzahltyp mit Vorzeichen, der dazu verwendet werden kann, die Anzahl von Elementen eines hash_map-Elements in einen Bereich zwischen Elementen darzustellen, auf die von Iteratoren gezeigt wird.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::difference_type difference_type;
Beispiel
// hash_map_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <hash_map>
#include <algorithm>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <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 won't insert, because map keys are unique
hm1.insert ( Int_Pair ( 2, 30 ) );
hash_map <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_map
hash_map <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_map 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_map hm1 is: 3.
The keys of the mapped elements are: 1 2 3.
The values of the mapped elements are: 10 20 20.
hash_map::emplace
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Fügt ein Element ein, das vor Ort in ein hash_map-Element erstellt wird.
template <class ValTy>
pair <iterator, bool>
emplace(
ValTy&& val);
Parameter
val
Der zum Verschieben des Konstrukts verwendete Wert erstellt ein Element, das in das hash_map Element eingefügt werden soll, es sei denn, das hash_map element enthält dieses Element (oder im Allgemeinen ein Element, dessen Schlüssel gleichwertig sortiert ist).
Rückgabewert
Die emplace Memberfunktion gibt ein Paar zurück, dessen bool Komponente zurückgibt true , ob eine Einfügung vorgenommen wurde und false ob das hash_map element bereits ein Element enthielt, dessen Schlüssel einen entsprechenden Wert in der Sortierung aufweist und dessen iterator Komponente die Adresse zurückgibt, an der ein neues Element eingefügt wurde oder wo sich das Element bereits befindet.
Um auf die iterator-Komponente eines pr-Paares zuzugreifen, das von dieser Memberfunktion zurückgegeben wird, verwenden Sie pr.first und *(pr.first), um es zu dereferenzieren. Um auf die bool-Komponente eines pr-Paares zuzugreifen, das von dieser Memberfunktion zurückgegeben wird, verwenden Sie pr.second und *(pr.second), um es zu dereferenzieren.
Hinweise
Das hash_map::value_type Element ist ein Paar, sodass der Wert eines Elements ein geordnetes Paar mit der ersten Komponente ist, die dem Schlüsselwert und der zweiten Komponente entspricht dem Datenwert des Elements.
Beispiel
// hash_map_emplace.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
#include <string>
int main()
{
using namespace std;
using namespace stdext;
hash_map<int, string> hm1;
typedef pair<int, string> is1(1, "a");
hm1.emplace(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_map::emplace_hint
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Fügt ein Element ein, das vor Ort mit einem Platzierungshinweis in ein hash_map-Element erstellt wird.
template <class ValTy>
iterator emplace_hint(
const_iterator _Where,
ValTy&& val);
Parameter
val
Der zum Verschieben des Konstrukts verwendete Wert erstellt ein Element, das in das hash_map Element eingefügt werden soll, es sei denn, das hash_map element enthält dieses Element (oder im Allgemeinen ein Element, dessen Schlüssel gleichwertig sortiert ist).
c
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 die Position zeigt, an der das neue Element in das hash_mapElement eingefügt wurde oder wo sich das vorhandene Element mit entsprechender Reihenfolge befindet.
Hinweise
Das hash_map::value_type Element ist ein Paar, sodass der Wert eines Elements ein geordnetes Paar mit der ersten Komponente ist, die dem Schlüsselwert und der zweiten Komponente entspricht dem Datenwert des Elements.
Das Einfügen kann in amortisierter konstanter Zeit anstelle von logarithmischer Zeit erfolgen, wenn die Einfügemarke direkt auf _Where folgt.
Beispiel
// hash_map_emplace_hint.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
#include <string>
int main()
{
using namespace std;
using namespace stdext;
hash_map<int, string> hm1;
typedef pair<int, string> is1(1, "a");
hm1.emplace(hm1.begin(), 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_map::empty
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Testet, ob ein hash_map-Element leer ist.
bool empty() const;
Rückgabewert
true wenn die hash_map leer ist; false wenn dies hash_map nicht zu ernennen ist.
Beispiel
// hash_map_empty.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1, hm2;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 1 ) );
if ( hm1.empty( ) )
cout << "The hash_map hm1 is empty." << endl;
else
cout << "The hash_map hm1 is not empty." << endl;
if ( hm2.empty( ) )
cout << "The hash_map hm2 is empty." << endl;
else
cout << "The hash_map hm2 is not empty." << endl;
}
The hash_map hm1 is not empty.
The hash_map hm2 is empty.
hash_map::end
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element einem hash_map-Element nachfolgt.
const_iterator end() const;
iterator end();
Rückgabewert
Ein bidirektionaler Iterator, der die Position adressiert, die das letzte Element in einem hash_map. Wenn die hash_map leer ist, gilt anschließend hash_map::end == hash_map::begin.
Hinweise
end wird verwendet, um zu testen, ob ein Iterator das Ende seines hash_map erreicht hat.
Der zurückgegebene end Wert sollte nicht abgeleitet werden.
Beispiel
// hash_map_end.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <int, int> :: iterator hm1_Iter;
hash_map <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_map::equal_range
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt ein Iteratorpaar jeweils bezogen auf das erste Element in einem hash_map-Objekt mit einem Schlüssel zurück, der größer als ein bestimmter Schlüssel ist, bzw. bezogen auf das erste Element im hash_map-Objekt 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üsselwert, der mit dem Sortierschlüssel eines Elements aus dem hash_map durchsuchten Element verglichen werden soll.
Rückgabewert
Ein Paar Iteratoren, sodass der erste der lower_bound Schlüssel und der zweite der upper_bound Schlüssel ist.
Um auf den ersten Iterator eines von der Memberfunktion zurückgegebenen Paares pr zuzugreifen, verwenden pr.first Sie die Untergrenze *(pr.first)des Iterators, und leiten Sie es ab. Um auf den zweiten Iterator eines von der Memberfunktion zurückgegebenen Paares pr zuzugreifen, verwenden Sie den oberen begrenzungsfähigen Iterator, und pr.second leiten Sie es ab *(pr.second).
Beispiel
// hash_map_equal_range.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
typedef hash_map <int, int> IntMap;
IntMap hm1;
hash_map <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 <IntMap::const_iterator, IntMap::const_iterator> p1, p2;
p1 = hm1.equal_range( 2 );
cout << "The lower bound of the element with "
<< "a key of 2 in the hash_map hm1 is: "
<< p1.first -> second << "." << endl;
cout << "The upper bound of the element with "
<< "a key of 2 in the hash_map 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_map hm1 doesn't have an element "
<< "with a key less than 40." << endl;
else
cout << "The element of hash_map hm1 with a key >= 40 is: "
<< p1.first -> first << "." << endl;
}
The lower bound of the element with a key of 2 in the hash_map hm1 is: 20.
The upper bound of the element with a key of 2 in the hash_map 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_map hm1 doesn't have an element with a key less than 40.
hash_map::erase
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Es wird ein Element oder ein Bereich von Elementen in einem hash_map 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
_Where
Die Position des Elements, das aus dem hash_mapElement entfernt werden soll.
first
Position des ersten Elements, das aus dem hash_map.
last
Position direkt über dem letzten Element entfernt aus dem hash_map.
key
Der Schlüsselwert der Elemente, die aus dem hash_mapElement entfernt werden sollen.
Rückgabewert
Bei den ersten beiden Memberfunktionen wird ein bidirektionaler Iterator, der das erste Element bestimmt, das über alle entfernten Elemente hinausgeht, oder einen Zeiger auf das Ende des hash_map Elements, wenn kein solches Element vorhanden ist.
Gibt für die dritte Memberfunktion die Anzahl der Elemente zurück, die aus dem hash_mapElement entfernt wurden.
Hinweise
Von der Memberfunktionen wird nie eine Ausnahme ausgelöst.
Beispiel
Im folgenden Beispiel wird die Verwendung der hash_map::erase Memberfunktion veranschaulicht.
// hash_map_erase.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main()
{
using namespace std;
using namespace stdext;
hash_map<int, int> hm1, hm2, hm3;
hash_map<int, int> :: iterator pIter, Iter1, Iter2;
int i;
hash_map<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_map 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_map 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
n = hm3.erase(2);
cout << "After the element with a key of 2 is deleted,\n"
<< "the hash_map 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"
<< endl;
cout << "of the 2nd element is deleted, "
<< "the hash_map hm3 is:";
for (pIter = hm3.begin(); pIter != hm3.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
}
After the 2nd element is deleted, the hash_map hm1 is: 1 3 4.
After the middle two elements are deleted, the hash_map hm2 is: 1 16.
After the element with a key of 2 is deleted,
the hash_map hm3 is: 0 2 3.
The number of elements removed from hm3 is: 1.
After another element with a key equal to that
of the 2nd element is deleted, the hash_map hm3 is: 0 3.
hash_map::find
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen Iterator zurück, der die Position eines Elements in einem hash_map-Element adressiert, das einen Schlüssel aufweist, der einen angegebenen Schlüssel entspricht.
iterator find(const Key& key);
const_iterator find(const Key& key) const;
Parameter
key
Der Schlüsselwert, der durch den Sortierschlüssel eines Elements abgeglichen werden soll, aus dem hash_map durchsucht wird.
Rückgabewert
Ein Iterator, der die Position eines Elements mit einem angegebenen Schlüssel adressiert, oder die Position, an der das letzte Element im letzten Element erfolgreich hash_map war, wenn keine Übereinstimmung für den Schlüssel gefunden wird.
Hinweise
find gibt einen Iterator zurück, der hash_map ein Element im Sortierschlüssel adressiert, dessen Sortierschlüssel dem Argumentschlüssel unter einem binären Prädikat entspricht, das eine Sortierung basierend auf einer Vergleichbarkeitsbeziehung auslöst.
Wenn der Rückgabewert find eines const_iteratorObjekts zugewiesen ist, kann das hash_map Objekt nicht geändert werden. Wenn der Rückgabewert find eines iteratorObjekts zugewiesen ist, kann das hash_map Objekt geändert werden.
Beispiel
// hash_map_find.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <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_RcIter = hm1.find( 2 );
cout << "The element of hash_map hm1 with a key of 2 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_map hm1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of hash_map hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
// The element at a specific location in the hash_map 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 element of hm1 with a key matching "
<< "that of the last element is: "
<< hm1_RcIter -> second << "." << endl;
}
The element of hash_map hm1 with a key of 2 is: 20.
The hash_map hm1 doesn't have an element with a key of 4.
The element of hm1 with a key matching that of the last element is: 30.
hash_map::get_allocator
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt eine Kopie des allocator -Objekts zurück, das zum Erstellen des hash_mapObjekts verwendet wird.
Allocator get_allocator() const;
Rückgabewert
Der von der hash_mapZuweisung verwendete Allokator .
Hinweise
Allocators für die hash_map Klasse geben an, wie die Klasse 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_map_get_allocator.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int>::allocator_type hm1_Alloc;
hash_map <int, int>::allocator_type hm2_Alloc;
hash_map <int, double>::allocator_type hm3_Alloc;
hash_map <int, int>::allocator_type hm4_Alloc;
// The following lines declare objects
// that use the default allocator.
hash_map <int, int> hm1;
hash_map <int, int> hm2;
hash_map <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_map hm4
// with the allocator of hash_map hm1.
hash_map <int, int> hm4( less<int>( ), hm1_Alloc );
hm4_Alloc = hm4.get_allocator( );
// Two allocators are interchangeable if
// storage allocated from each can be
// deallocated with the other
if( hm1_Alloc == hm4_Alloc )
{
cout << "The allocators are interchangeable."
<< endl;
}
else
{
cout << "The allocators are not interchangeable."
<< endl;
}
}
hash_map::hash_map
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Erstellt ein leeres hash_map Objekt oder eine Kopie eines teils oder aller anderen hash_mapElemente.
hash_map();
explicit hash_map(
const Traits& Comp);
hash_map(
const Traits& Comp,
const Allocator& Al);
hash_map(
const hash_map& Right);
hash_map(
hash_map&& Right);
hash_map(
initializer_list<Type> IList);hash_map(initializer_list<Type> IList,
const key_compare& Comp);
hash_map(
initializer_list<Type> IList,
const key_compare& Comp,
const allocator_type& Al);
template <class InputIterator>
hash_map(
InputIterator First,
InputIterator Last);
template <class InputIterator>
hash_map(
InputIterator First,
InputIterator Last,
const Traits& Comp);
template <class InputIterator>
hash_map(
InputIterator First,
InputIterator Last,
const Traits& Comp,
const Allocator& Al
Parameter
Al
Die für dieses hash_map-Objekt zu verwendende Speicherzuweisungsklasse, dessen Standard Allocator ist.
Comp
Die Vergleichsfunktion des Typs Const Traits , die verwendet wird, um die Elemente in der hash_mapStandardeinstellung hash_comparezu ordnen.
Right
Die hash_map erstellte Karte soll eine Kopie sein.
First
Die Position des ersten Elements in dem zu kopierenden Elementbereich.
Last
Die Position des ersten Elements nach dem zu kopierenden Elementbereich.
IList
Der initializer_list
Hinweise
Alle Konstruktoren speichern einen Typ von Allocator-Objekt, der speicherverwaltung für den hash_map und kann später durch Aufrufen get_allocatorzurückgegeben werden. Der Zuweisungsparameter wird häufig aus den Klassendeklarationen und den Vorverarbeitungsmakros weggelassen, die zum Ersetzen alternativer Zuweisungen verwendet werden.
Alle Konstruktoren initialisieren ihre hash_map.
Alle Konstruktoren speichern ein Funktionsobjekt vom Typ Traits , das verwendet wird, um eine Reihenfolge zwischen den Schlüsseln der hash_map und die später durch Aufrufen key_compzurückgegeben werden können.
Die ersten drei Konstruktoren geben außerdem einen leeren Anfangstyp hash_mapan, und der 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 der hash_mapRight.
Die nächsten drei Konstruktoren kopieren den Bereich eines [First, Last) Bereichs hash_map mit zunehmender Explizitkeit bei der Angabe des Typs der Vergleichsfunktion der Klasse Traits und des Allokators.
Der letzte Konstruktor verschiebt die hash_mapRight.
hash_map::insert
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Fügt ein Element oder einen Elementbereich in ein hash_map-Element ein.
pair <iterator, bool> insert(
const value_type& val);
iterator insert(
const_iterator _Where,
const value_type& val);
template <class InputIterator>
void insert(
InputIterator first,
InputIterator last);
template <class ValTy>
pair <iterator, bool>
insert(
ValTy&& val);
template <class ValTy>
iterator insert(
const_iterator _Where,
ValTy&& val);
Parameter
val
Der Wert eines Elements, das in das hash_map Element eingefügt werden soll, es sei denn, das hash_map Element enthält dieses Element (oder im Allgemeinen ein Element, dessen Schlüssel äquivalent sortiert ist).
_Where
Ein Hinweis bezüglich des Platzes, an dem mit der Suche nach dem richtigen Einfügepunkt begonnen wird.
first
Die Position des ersten Elements, das aus hash_map kopiert werden soll.
last
Die Position direkt über den letzten aus hash_map zu kopierenden Elements.
Rückgabewert
Die erste insert Memberfunktion gibt ein Paar zurück, dessen bool Komponente zurückgibt true , ob eine Einfügung vorgenommen wurde und false ob das hash_map element bereits ein Element enthielt, dessen Schlüssel einen entsprechenden Wert in der Sortierung aufweist und dessen Iteratorkomponente die Adresse zurückgibt, an der ein neues Element eingefügt wurde oder wo sich das Element bereits befindet.
Um auf die Iteratorkomponente eines pr-Paares zuzugreifen, das von dieser Memberfunktion zurückgegeben wird, verwenden Sie pr.first und (pr.first), um es zu dereferenzieren. Um auf die bool-Komponente eines pr-Paares zuzugreifen, das von dieser Memberfunktion zurückgegeben wird, verwenden Sie pr.second und (pr.second), um es zu dereferenzieren.
Die zweite insert Memberfunktion, die Hint-Version, gibt einen Iterator zurück, der auf die Position zeigt, an der das neue Element in die hash_map.
Die letzten beiden insert Memberfunktionen verhalten sich genauso wie die ersten beiden, mit der Ausnahme, dass sie den eingefügten Wert verschieben.
Hinweise
Das value_type Element ist ein Paar, sodass der Wert eines Elements ein geordnetes Paar mit der ersten Komponente ist, die dem Schlüsselwert und der zweiten Komponente entspricht dem Datenwert des Elements.
Einfügung kann in amortisierter konstanter Zeit anstelle von logarithmischer Zeit für die Hinweisversion von "insert" erfolgen, wenn die Einfügemarke _Where direkt folgt.
Die dritte Memberfunktion fügt die Abfolge von Elementwerten in ein hash_map entsprechendes Element ein, das von einem Iterator im Bereich *[First, Last)* eines angegebenen Satzes adressiert wird.
Beispiel
// hash_map_insert.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
#include <string>
int main()
{
using namespace std;
using namespace stdext;
hash_map<int, int>::iterator hm1_pIter, hm2_pIter;
hash_map<int, int> hm1, hm2;
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(4, 40));
cout << "The original elements (Key => Value) of hm1 are:";
for (hm1_pIter = hm1.begin(); hm1_pIter != hm1.end(); hm1_pIter++)
cout << endl << " " << hm1_pIter -> first << " => "
<< hm1_pIter->second;
cout << endl;
pair< hash_map<int,int>::iterator, bool > pr;
pr = hm1.insert(Int_Pair(1, 10));
if (pr.second == true)
{
cout << "The element 10 was inserted in hm1 successfully."
<< endl;
}
else
{
cout << "The element 10 already exists in hm1\n"
<< "with a key value of "
<< "((pr.first) -> first) = " << (pr.first)->first
<< "." << endl;
}
// The hint version of insert
hm1.insert(--hm1.end(), Int_Pair(5, 50));
cout << "After the insertions, the elements of hm1 are:";
for (hm1_pIter = hm1.begin(); hm1_pIter != hm1.end(); hm1_pIter++)
cout << endl << hm1_pIter -> first << " => "
<< hm1_pIter->second;
cout << endl;
hm2.insert(Int_Pair(10, 100));
// The templatized version inserting a range
hm2.insert( ++hm1.begin(), --hm1.end() );
cout << "After the insertions, the elements of hm2 are:";
for (hm2_pIter = hm2.begin(); hm2_pIter != hm2.end(); hm2_pIter++)
cout << endl << hm2_pIter -> first << " => "
<< hm2_pIter->second;
cout << endl;
// The templatized versions move constructing elements
hash_map<int, string> hm3, hm4;
pair<int, string> is1(1, "a"), is2(2, "b");
hm3.insert(move(is1));
cout << "After the move insertion, hm3 contains:" << endl
<< hm3.begin()->first
<< " => " << hm3.begin()->second
<< endl;
hm4.insert(hm4.begin(), move(is2));
cout << "After the move insertion, hm4 contains:" << endl
<< hm4.begin()->first
<< " => " << hm4.begin()->second
<< endl;
}
The original elements (Key => Value) of hm1 are:
1 => 10
2 => 20
3 => 30
4 => 40
The element 10 already exists in hm1
with a key value of ((pr.first) -> first) = 1.
After the insertions, the elements of hm1 are:
1 => 10
2 => 20
3 => 30
4 => 40
5 => 50
After the insertions, the elements of hm2 are:
2 => 20
10 => 100
3 => 30
4 => 40
After the move insertion, hm3 contains:
1 => a
After the move insertion, hm4 contains:
2 => b
hash_map::iterator
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der einen bidirektionalen Iterator bereitstellt, mit dem jedes Element in einer hash_map gelesen oder geändert werden kann.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::iterator iterator;
Hinweise
Die iterator durch Punkte definierten hash_map Elemente, bei denen es sich um Objekte vom value_typeTyp pair<const Key, Type>handelt , deren 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 Iter Operator, um einen Iterator abzuleiten, der auf -> ein Element in einer Multimap zeigt.
Um auf den Wert des Schlüssels für das Element zuzugreifen, verwenden Sie Iter->firstdie Entsprechende .(*Iter).first Um auf den Wert des zugeordneten Datums für das Element zuzugreifen, verwenden Sie Iter->seconddies , was entspricht (*Iter).second.
Ein Typ iterator kann verwendet werden, um den Wert eines Elements zu ändern.
Beispiel
Ein Beispiel für begin das Deklarieren und Verwenden der iterator.
hash_map::key_comp
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ruft eine Kopie des Vergleichsobjekts ab, das zum Sortieren der Schlüssel in hash_map verwendet wird.
key_compare key_comp() const;
Rückgabewert
Gibt das Funktionsobjekt zurück, das zum hash_map Sortieren seiner Elemente verwendet wird.
Hinweise
Das gespeicherte Objekt definiert die Memberfunktion
bool operator( const Key& left, const Key&right );
die zurückgibt true , ob left sie vorangestellt ist und nicht in der Sortierreihenfolge gleich ist right .
Beispiel
// hash_map_key_comp.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int, hash_compare<int, less<int> > > hm1;
hash_map <int, int, hash_compare<int, less<int> > >::key_compare
kc1 = hm1.key_comp( ) ;
// Operator stored in kc1 tests order & returns bool value
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"
<< " of type key_compare." << endl;
}
else
{
cout << "kc1( 2,3 ) returns value of false"
<< "\n where kc1 is the function object of hm1"
<< " of type key_compare." << endl;
}
hash_map <int, int, hash_compare<int, greater<int> > > hm2;
hash_map <int, int, hash_compare<int, greater<int> > >
::key_compare kc2 = hm2.key_comp( );
// Operator stored in kc2 tests order & returns bool value
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"
<< " of type key_compare." << endl;
}
else
{
cout << "kc2( 2,3 ) returns value of false,"
<< "\n where kc2 is the function object of hm2"
<< " of type key_compare." << endl;
}
}
hash_map::key_compare
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Eine Typ, der ein Funktionsobjekt bereitstellt, das zwei Sortierschlüssel vergleichen kann, um die relative Position von zwei Elementen in der hash_map zu bestimmen.
typedef Traits key_compare;
Hinweise
key_compare ist ein Synonym für den Vorlagenparameter Traits.
Weitere Informationen Traits finden Sie im hash_map Thema "Klasse ".
Beispiel
Ein Beispiel für key_comp das Deklarieren und Verwenden key_comparefinden Sie im Beispiel.
hash_map::key_type
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ beschreibt das Sortierschlüsselobjekt, das jedes Element von hash_map bildet.
typedef Key key_type;
Hinweise
key_type ist ein Synonym für den Vorlagenparameter Key.
Weitere Informationen Keyfinden Sie im Abschnitt "Hinweise" des hash_map Themas "Klasse ".
Beispiel
Ein Beispiel für value_type das Deklarieren und Verwenden key_typefinden Sie im Beispiel.
hash_map::lower_bound
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen Iterator zum ersten Element in einem hash_map-Element mit einem Schlüsselwert zurück, der gleich oder größer ist, als ein angegebener Schlüssel.
iterator lower_bound(const Key& key);
const_iterator lower_bound(const Key& key) const;
Parameter
key
Der Argumentschlüsselwert, der mit dem Sortierschlüssel eines Elements aus dem hash_map durchsuchten Element verglichen werden soll.
Rückgabewert
Eine iterator oder const_iterator die die Position eines Elements in einem hash_map Element angibt, das mit einem Schlüssel gleich oder größer als dem Argumentschlüssel ist, oder die die Position angibt, an der das letzte Element erfolgreich war hash_map , wenn keine Übereinstimmung für den Schlüssel gefunden wird.
Wenn der Rückgabewert lower_bound eines const_iteratorObjekts zugewiesen ist, kann das hash_map Objekt nicht geändert werden. Wenn der Rückgabewert lower_bound eines iteratorObjekts zugewiesen ist, kann das hash_map Objekt geändert werden.
Beispiel
// hash_map_lower_bound.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <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_RcIter = hm1.lower_bound( 2 );
cout << "The first element of hash_map hm1 with a key of 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_map hm1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of hash_map hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
// An element at a specific location in the hash_map 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 element of hm1 with a key matching "
<< "that of the last element is: "
<< hm1_RcIter -> second << "." << endl;
}
The first element of hash_map hm1 with a key of 2 is: 20.
The hash_map hm1 doesn't have an element with a key of 4.
The element of hm1 with a key matching that of the last element is: 30.
hash_map::mapped_type
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der den in einer hash_map gespeicherten Datentyp darstellt.
typedef Type mapped_type;
Hinweise
Der Typ mapped_type stellt ein Synonym für den Vorlagenparameter Type dar.
Weitere Informationen Type finden Sie im hash_map Thema "Klasse ".
Beispiel
Ein Beispiel für value_type das Deklarieren und Verwenden key_typefinden Sie im Beispiel.
hash_map::max_size
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt die Maximallänge der hash_map zurück.
size_type max_size() const;
Rückgabewert
Die maximal mögliche Länge der hash_map.
Beispiel
// hash_map_max_size.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <int, int> :: size_type i;
i = hm1.max_size( );
cout << "The maximum possible length "
<< "of the hash_map is " << i << "."
<< endl << "(Magnitude is machine specific.)";
}
hash_map::operator[]
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Fügt ein Element in ein hash_map-Element mit einem angegebenen Schlüsselwert ein.
Type& operator[](const Key& key);
Type& operator[](Key&& key);
Parameter
key
Der Schlüsselwert des einzufügenden Elements.
Rückgabewert
Ein Verweis auf den Datenwert des eingefügten Elements.
Hinweise
Wenn der Argumentschlüsselwert nicht gefunden wird, wird er zusammen mit dem Standardwert des Datentyps eingefügt.
operator[] kann auch zum Einfügen von Elementen in einem hash_map m verwendet werden, unter Verwendung von
m[ key] = DataValue;
dort wo der DataValue der Wert des mapped_type des Elements mit einem Schlüsselwert von key ist.
Beim Einfügen von operator[] Elementen gibt der zurückgegebene Verweis nicht an, ob eine Einfügung ein bereits vorhandenes Element ändert oder ein neues Element erstellt. Die Memberfunktionen find und insert können verwendet werden, um zu bestimmen, ob ein Element mit einer angegebenen Taste bereits vor der Einfügung vorhanden ist.
Beispiel
// hash_map_op_ref.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
using namespace stdext;
typedef pair <const int, int> cInt2Int;
hash_map <int, int> hm1;
hash_map <int, int> :: iterator pIter;
// Insert a data value of 10 with a key of 1
// into a hash_map using the operator[] member function
hm1[ 1 ] = 10;
// Compare other ways to insert objects into a hash_map
hm1.insert ( hash_map <int, int> :: value_type ( 2, 20 ) );
hm1.insert ( cInt2Int ( 3, 30 ) );
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;
// If the key already exists, operator[]
// changes the value of the datum in the element
hm1[ 2 ] = 40;
// operator[] will also insert the value of the data
// type's default constructor if the value is unspecified
hm1[5];
cout << "The keys of the mapped elements are now:";
for ( pIter = hm1.begin( ) ; pIter != hm1.end( ) ; pIter++ )
cout << " " << pIter -> first;
cout << "." << endl;
cout << "The values of the mapped elements are now:";
for ( pIter = hm1.begin( ) ; pIter != hm1.end( ) ; pIter++ )
cout << " " << pIter -> second;
cout << "." << endl;
// operator[] will also insert by moving a key
hash_map <string, int> hm2;
string str("a");
hm2[move(str)] = 1;
cout << "The moved key is " << hm2.begin()->first
<< ", with value " << hm2.begin()->second << endl;
}
hash_map::operator=
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ersetzt die Elemente der hash_map mit einer Kopie einer anderen hash_map.
hash_map& operator=(const hash_map& right);
hash_map& operator=(hash_map&& right);
Parameter
right
Die right Klasse , die in die hash_mapDatei kopiert wird.
Hinweise
Nachdem ein vorhandenes Element in einem hash_map gelöscht wurde, kopiert oder verschiebt operator= den Inhalt von right in den hash_map.
Beispiel
// hash_map_operator_as.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map<int, int> v1, v2, v3;
hash_map<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_map::pointer
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der einen Zeiger auf ein Element in einer hash_map 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 Objekt verwendet werden, um auf die Elemente in einem hash_map Objekt zuzugreifen.
hash_map::rbegin
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen Iterator zurück, der das erste Element in einem umgekehrten hash_map-Element adressiert.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Rückgabewert
Ein umgekehrter bidirektionaler Iterator, der das erste Element in einer umgekehrten hash_map Oder adressiert, was das letzte Element in der unreversierten hash_map.
Hinweise
rbegin wird mit einem umgekehrten hash_map verwendet, genau wie begin bei einem hash_map.
Wenn der Rückgabewert rbegin eines const_reverse_iteratorObjekts zugewiesen ist, kann das hash_map Objekt nicht geändert werden. Wenn der Rückgabewert rbegin eines reverse_iteratorObjekts zugewiesen ist, kann das hash_map Objekt geändert werden.
Mit rbegin kann ein hash_map rückwärts durchlaufen werden.
Beispiel
// hash_map_rbegin.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <int, int> :: iterator hm1_Iter;
hash_map <int, int> :: reverse_iterator hm1_rIter;
hash_map <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_map hm1 is "
<< hm1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a hash_map in a forward order
cout << "The hash_map 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_map in a reverse order
cout << "The reversed hash_map is: ";
for ( hm1_rIter = hm1.rbegin( ) ; hm1_rIter != hm1.rend( ); hm1_rIter++)
cout << hm1_rIter -> first << " ";
cout << "." << endl;
// A hash_map element can be erased by dereferencing to its key
hm1_rIter = hm1.rbegin( );
hm1.erase ( hm1_rIter -> first );
hm1_rIter = hm1.rbegin( );
cout << "After the erasure, the first element "
<< "in the reversed hash_map is "
<< hm1_rIter -> first << "." << endl;
}
The first element of the reversed hash_map hm1 is 3.
The hash_map is: 1 2 3 .
The reversed hash_map is: 3 2 1 .
After the erasure, the first element in the reversed hash_map is 2.
hash_map::reference
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der einen Verweis auf ein in einer hash_map gespeichertes Element bereitstellt.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::reference reference;
Beispiel
// hash_map_reference.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <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_map 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_map 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_map is 1.
The data value of first element in the hash_map is 10.
The modified data value of first element is 15.
hash_map::rend
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines umgekehrten hash_map-Elements nachfolgt.
const_reverse_iterator rend() const;
reverse_iterator rend();
Rückgabewert
Ein umgekehrter bidirektionaler Iterator, der die Position adressiert, die das letzte Element in einem umgekehrten hash_map Element erfolgreich war (die Position, die dem ersten Element in der unreversierten hash_mapSeite vorausging).
Hinweise
rend wird mit einem umgekehrten hash_map verwendet, genau wie end bei einem hash_map.
Wenn der Rückgabewert rend eines const_reverse_iteratorObjekts zugewiesen ist, kann das hash_map Objekt nicht geändert werden. Wenn der Rückgabewert rend eines reverse_iteratorObjekts zugewiesen ist, kann das hash_map Objekt geändert werden.
rend kann verwendet werden, um zu testen, ob das Ende der hash_map von einem umgekehrten Iterator erreicht wurde.
Der zurückgegebene rend Wert sollte nicht abgeleitet werden.
Beispiel
// hash_map_rend.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <int, int> :: iterator hm1_Iter;
hash_map <int, int> :: reverse_iterator hm1_rIter;
hash_map <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_map hm1 is "
<< hm1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a hash_map in a forward order
cout << "The hash_map 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_map in a reverse order
cout << "The reversed hash_map is: ";
for ( hm1_rIter = hm1.rbegin( ) ; hm1_rIter != hm1.rend( );
hm1_rIter++)
cout << hm1_rIter -> first << " ";
cout << "." << endl;
// A hash_map element can be erased by dereferencing to 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_map is "
<< hm1_rIter -> first << "." << endl;
}
The last element of the reversed hash_map hm1 is 1.
The hash_map is: 1 2 3 .
The reversed hash_map is: 3 2 1 .
After the erasure, the last element in the reversed hash_map is 2.
hash_map::reverse_iterator
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der einen bidirektionalen Iterator bereitstellt, mit dem ein Element in einem umgekehrten hash_map-Element gelesen oder geändert werden kann.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::reverse_iterator reverse_iterator;
Hinweise
Ein Typ reverse_iterator kann den Wert eines Elements nicht ändern und wird zum Durchlaufen des hash_map umgekehrten Elements verwendet.
Die reverse_iterator durch Punkte definierten hash_map Elemente, die Objekte von value_type sind, d. h. vom Typ pair<const Key, Type>, deren 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 reverse_iterator Operator, um ein rIterhash_map Element in einem ->Element abzuleiten.
Um auf den Wert des Schlüssels für das Element zuzugreifen, verwenden Sie rIter->firstdie Entsprechende .(*rIter).first Um auf den Wert des zugeordneten Datums für das Element zuzugreifen, verwenden Sie rIter->seconddies , was entspricht (*rIter).first.
Beispiel
Ein Beispiel für rbegin das Deklarieren und Verwenden reverse_iteratorfinden Sie im Beispiel.
hash_map::size
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt die Anzahl von Elementen in der hash_map zurück.
size_type size() const;
Rückgabewert
Die aktuelle Länge des hash_map.
Beispiel
Im folgenden Beispiel wird die Verwendung der hash_map::size Memberfunktion veranschaulicht.
// hash_map_size.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map<int, int> hm1, hm2;
hash_map<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 1));
i = hm1.size();
cout << "The hash_map length is " << i << "." << endl;
hm1.insert(Int_Pair(2, 4));
i = hm1.size();
cout << "The hash_map length is now " << i << "." << endl;
}
The hash_map length is 1.
The hash_map length is now 2.
hash_map::size_type
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Eine Ganzzahltyp ohne Vorzeichen, der die Anzahl von Elementen in hash_map darstellen kann.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::size_type size_type;
Beispiel
Ein Beispiel für size das Deklarieren und Verwenden finden Sie unter size_type
hash_map::swap
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Tauscht die Elemente zweier hash_mapn.
void swap(hash_map& right);
Parameter
right
Das Argument hash_map , das die Elemente bereitstellt, die mit dem Ziel hash_mapausgetauscht werden sollen.
Hinweise
Die Memberfunktion weist keine Verweise, Zeiger oder Iteratoren auf, die Elemente in den beiden hash_mapElementen kennzeichnen, deren Elemente ausgetauscht werden.
Beispiel
// hash_map_swap.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1, hm2, hm3;
hash_map <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_map 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
// hm2 is said to be the argument hash_map;
// hm1 is said to be the target hash_map
hm1.swap( hm2 );
cout << "After swapping with hm2, hash_map 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_map hm1 is:";
for ( hm1_Iter = hm1.begin( ); hm1_Iter != hm1.end( ); hm1_Iter++ )
cout << " " << hm1_Iter -> second;
cout << "." << endl;
}
The original hash_map hm1 is: 10 20 30.
After swapping with hm2, hash_map hm1 is: 100 200.
After swapping with hm3, hash_map hm1 is: 300.
hash_map::upper_bound
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt einen Iterator an das erste Element in einem hash_map Element zurück, bei dem ein Schlüssel einen Wert aufweist, der größer als der eines angegebenen Schlüssels ist.
iterator upper_bound(const Key& key);
const_iterator upper_bound(const Key& key) const;
Parameter
key
Der Argumentschlüsselwert, der mit dem Sortierschlüsselwert eines Elements aus dem hash_map durchsuchten Element verglichen werden soll.
Rückgabewert
Eine iterator oder const_iterator die die Position eines Elements in einem hash_map Element angibt, das einen Schlüssel enthält, der größer als der Argumentschlüssel ist, oder die die Position adressiert, an der das letzte Element im letzten Element gefunden hash_map wird, wenn keine Übereinstimmung für den Schlüssel gefunden wird.
Wenn dem Rückgabewert ein const_iteratorWert zugewiesen ist, kann das hash_map Objekt nicht geändert werden. Wenn dem Rückgabewert ein iteratorWert zugewiesen ist, kann das hash_map Objekt geändert werden.
Beispiel
// hash_map_upper_bound.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int> hm1;
hash_map <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_RcIter = hm1.upper_bound( 2 );
cout << "The first element of hash_map hm1 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. upper_bound ( 4 );
if ( hm1_RcIter == hm1.end( ) )
cout << "The hash_map hm1 doesn't have an element "
<< "with a key greater than 4." << endl;
else
cout << "The element of hash_map hm1 with a key > 4 is: "
<< hm1_RcIter -> second << "." << endl;
// The element at a specific location in the hash_map can be found
// using a dereferenced iterator addressing the location
hm1_AcIter = hm1.begin( );
hm1_RcIter = hm1. upper_bound ( hm1_AcIter -> first );
cout << "The 1st element of hm1 with a key greater than that\n"
<< "of the initial element of hm1 is: "
<< hm1_RcIter -> second << "." << endl;
}
The first element of hash_map hm1 with a key greater than 2 is: 30.
The hash_map hm1 doesn't have an element with a key greater than 4.
The 1st element of hm1 with a key greater than that
of the initial element of hm1 is: 20.
hash_map::value_comp
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Gibt ein Funktionsobjekt zurück, das die Reihenfolge von Elementen in einem hash_map Element bestimmt, indem die Schlüsselwerte verglichen werden.
value_compare value_comp() const;
Rückgabewert
Gibt das Vergleichsfunktionsobjekt zurück, das zum hash_map Sortieren seiner Elemente verwendet wird.
Hinweise
Bei einem hash_mapm, wenn zwei Elemente e1 (k1, d1) und e2 (k2, d2) Objekte vom Typ value_typesind , wobei k1 und k2 ihre Schlüssel vom Typ key_type sind und deren d1d2 Daten vom Typ mapped_typesind , dann entspricht es m.value_comp()(e1, e2)m.key_comp()(k1, k2). 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_map_value_comp.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_map <int, int, hash_compare<int, less<int> > > hm1;
hash_map <int, int, hash_compare<int, less<int> > >
::value_compare vc1 = hm1.value_comp( );
pair< hash_map<int,int>::iterator, bool > pr1, pr2;
pr1= hm1.insert ( hash_map <int, int> :: value_type ( 1, 10 ) );
pr2= hm1.insert ( hash_map <int, int> :: value_type ( 2, 5 ) );
if( vc1( *pr1.first, *pr2.first ) == 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 ( *pr2.first, *pr1.first ) == 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_map::value_type
Hinweis
Diese API ist veraltet. Die Alternative ist unordered_map "Class".
Ein Typ, der den Typ des objekts darstellt, das in einer hash_map.
typedef pair<const Key, Type> value_type;
Hinweise
value_type wird deklariert pair<const key_type, mapped_type> und nicht pair<key_type, mapped_type> , weil die Schlüssel eines assoziativen Containers möglicherweise nicht mithilfe eines nicht zusammenhängenden Iterators oder Verweises geändert werden.
Beispiel
// hash_map_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_map <int, int> hm1;
hash_map <int, int> :: key_type key1;
hash_map <int, int> :: mapped_type mapped1;
hash_map <int, int> :: value_type value1;
hash_map <int, int> :: iterator pIter;
// value_type can be used to pass the correct type
// explicitly to avoid implicit type conversion
hm1.insert ( hash_map <int, int> :: value_type ( 1, 10 ) );
// Compare other ways to insert objects into a hash_map
hm1.insert ( cInt2Int ( 2, 20 ) );
hm1[ 3 ] = 30;
// Initializing key1 and mapped1
key1 = ( hm1.begin( ) -> first );
mapped1 = ( hm1.begin( ) -> second );
cout << "The key of first element in the hash_map is "
<< key1 << "." << endl;
cout << "The data value of first element in the hash_map 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_map is 1.
The data value of first element in the hash_map is 10.
The keys of the mapped elements are: 1 2 3.
The values of the mapped elements are: 10 20 30.
Siehe auch
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz