hash_map
-Klasse
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_map
Datei 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_t
zu 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_map
Zuordnung 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_compare
sortiert. Auf dieses gespeicherte Objekt kann durch Aufrufen der Memberfunktion key_comp
zugegriffen werden. Ein solches Funktionsobjekt muss sich wie ein Objekt der Klasse hash_compare<Key, less<Key>>
verhalten. Insbesondere für alle Key
-Werte des Typs Key
erreicht der Traits
-Aufruf ( Key
) eine Verteilung der Werte 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 x
y
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_map n. |
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
Operator | 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
Header: <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_range
aus.
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_map
wird.
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_map
wird.
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();
Hinweise
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_type
Typ 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 ->
Operator, um ein const_iterator
cIter
Element in einem hash_map
Element abzuleiten.
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
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;
Hinweise
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_type
Typ 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 ->
Operator, um ein const_reverse_iterator
crIter
Element in einem hash_map
Element abzuleiten.
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).first
.
Beispiel
Ein Beispiel für rend
das Deklarieren und Verwenden der const_reverse_iterator
Datei 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_map
Element 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 crbegin
Objekts 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_map
Seite vorausging).
Hinweise
crend
wird mit einem umgekehrten hash_map
verwendet, genau wie hash_map::end
bei einem hash_map
.
Mit dem Rückgabewert des crend
Objekts 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_map
Element 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.
Hinweise
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)
.
Hinweise
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_map
Element 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_map
Element 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_map
Element 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_iterator
Objekts zugewiesen ist, kann das hash_map
Objekt nicht geändert werden. Wenn der Rückgabewert find
eines iterator
Objekts 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_map
Objekts verwendet wird.
Allocator get_allocator() const;
Rückgabewert
Der von der hash_map
Zuweisung 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_map
Elemente.
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_map
Standardeinstellung hash_compare
zu 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_allocator
zurü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_comp
zurückgegeben werden können.
Die ersten drei Konstruktoren geben außerdem einen leeren Anfangstyp hash_map
an, 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_map
Right
.
Die nächsten drei Konstruktoren kopieren den Bereich eines hash_map
Bereichs [First, Last)
mit zunehmender Explizitkeit bei der Angabe des Typs der Vergleichsfunktion der Klasse Traits
und des Allokators.
Der letzte Konstruktor verschiebt die hash_map
Right
.
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_type
Typ 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 ->
Operator, um einen Iterator abzuleiten, der auf Iter
ein Element in einer Multimap zeigt.
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).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_compare
finden 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 Key
finden Sie im Abschnitt "Hinweise" des hash_map
Themas "Klasse ".
Beispiel
Ein Beispiel für value_type
das Deklarieren und Verwenden key_type
finden 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_iterator
Objekts zugewiesen ist, kann das hash_map
Objekt nicht geändert werden. Wenn der Rückgabewert lower_bound
eines iterator
Objekts zugewiesen ist, kann das hash_map
Objekt geändert werden.
Hinweise
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_type
finden 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
.
Hinweise
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_map
Datei 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_iterator
Objekts zugewiesen ist, kann das hash_map
Objekt nicht geändert werden. Wenn der Rückgabewert rbegin
eines reverse_iterator
Objekts 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;
Hinweise
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_map
Seite 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_iterator
Objekts zugewiesen ist, kann das hash_map
Objekt nicht geändert werden. Wenn der Rückgabewert rend
eines reverse_iterator
Objekts 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 ->
Operator, um ein reverse_iterator
rIter
Element in einem hash_map
Element abzuleiten.
Um auf den Wert des Schlüssels für das Element zuzugreifen, verwenden Sie rIter->first
die Entsprechende .(*rIter).first
Um auf den Wert des zugeordneten Datums für das Element zuzugreifen, verwenden Sie rIter->second
dies , was entspricht (*rIter).first
.
Beispiel
Ein Beispiel für rbegin
das Deklarieren und Verwenden reverse_iterator
finden 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
.
Hinweise
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;
Hinweise
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_map
n.
void swap(hash_map& right);
Parameter
right
Das Argument hash_map
, das die Elemente bereitstellt, die mit dem Ziel hash_map
ausgetauscht werden sollen.
Hinweise
Die Memberfunktion weist keine Verweise, Zeiger oder Iteratoren auf, die Elemente in den beiden hash_map
Elementen 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_iterator
Wert zugewiesen ist, kann das hash_map
Objekt nicht geändert werden. Wenn dem Rückgabewert ein iterator
Wert zugewiesen ist, kann das hash_map
Objekt geändert werden.
Hinweise
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_map
m
, wenn 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
sind und deren d2
d1
Daten vom Typ mapped_type
sind , 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