hash_multimap — Klasa
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Klasa kontenera hash_multimap jest rozszerzeniem standardowej biblioteki C++ i służy do przechowywania i szybkiego pobierania danych z kolekcji, w której każdy element jest parą, która ma klucz sortowania, którego wartość nie musi być unikatowa i skojarzona wartość danych.
Składnia
template <class Key,
class Type,
class Traits=hash_compare <Key, less <Key>>,
class Allocator=allocator <pair <const Key, Type>>>
class hash_multimap
Parametry
Klawisz
Typ danych klucza, który ma być przechowywany w hash_multimap.
Type
Typ danych elementu, który ma być przechowywany w hash_multimap.
Cechy
Typ, który zawiera dwa obiekty funkcji, jedną z cech klasy, która jest w stanie porównać dwie wartości elementów jako klucze sortowania w celu określenia ich względnej kolejności i funkcji skrótu, która jest jednoargumentowym mapowaniem kluczowych wartości elementów na niepodpisane liczby całkowite typu size_t
. Ten argument jest opcjonalny i hash_compare<Key, less<Key>>
jest wartością domyślną.
Programu przydzielania
Typ reprezentujący przechowywany obiekt alokatora, który hermetyzuje szczegóły dotyczące alokacji hash_multimap i cofnięcia alokacji pamięci. Ten argument jest opcjonalny, a wartość domyślna to allocator<pair <const Key, Type>>
.
Uwagi
Hash_multimap to:
Kontenerem asocjacyjnym, który jest kontenerem o zmiennym rozmiarze, obsługującym efektywne pobieranie wartości elementu w oparciu o wartość skojarzonego klucza.
Odwracalny, ponieważ zapewnia dwukierunkowy iterator do dostępu do jego elementów.
Skrót, ponieważ jego elementy są pogrupowane w zasobniki na podstawie wartości funkcji skrótu zastosowanej do kluczowych wartości elementów.
Wielokrotna, ponieważ jej elementy nie muszą mieć unikatowych kluczy, więc jedna wartość klucza może mieć wiele wartości elementów danych z nią skojarzonych.
Kontener asocjacyjny pary, ponieważ jego wartości elementów różnią się od wartości klucza.
Szablon klasy, ponieważ funkcje, które udostępnia, są ogólne i tak niezależne od określonego typu danych zawartych jako elementy lub klucze. Typy danych, których można użyć dla elementów i kluczy, są zamiast tego określane jako parametry w szablonie klasy, wraz z funkcją porównania oraz alokatorem.
Główną zaletą tworzenia skrótów w sortowaniu jest większa wydajność; Pomyślne utworzenie skrótu wykonuje operacje wstawiania, usuwania i znajduje się w stałym średnim czasie w porównaniu z czasem proporcjonalnym do logarytmu liczby elementów w kontenerze na potrzeby technik sortowania. Wartość elementu w hash_multimap, ale nie skojarzona z nią wartość klucza, może zostać zmieniona bezpośrednio. Zamiast tego, wartości kluczy skojarzone ze starymi elementami muszą zostać usunięte, a nowe wartości klucza skojarzone z nowymi wstawionymi elementami.
Wybór typu kontenera powinien ogólnie być oparty o typ wyszukiwania i wstawiania wymagany przez aplikację. Skróty kontenerów asocjacyjnych są zoptymalizowane pod kątem operacji wyszukiwania, wstawiania i usuwania. Funkcje składowe, które jawnie obsługują te operacje, są wydajne w przypadku użycia z dobrze zaprojektowaną funkcją skrótu, wykonując je w czasie, który jest średnio stały i nie zależy od liczby elementów w kontenerze. Dobrze zaprojektowana funkcja skrótu tworzy jednolity rozkład wartości skrótów i minimalizuje liczbę kolizji, gdzie mówi się, że kolizja występuje, gdy różne wartości klucza są mapowane na tę samą wartość skrótu. W najgorszym przypadku z najgorszą możliwą funkcją skrótu liczba operacji jest proporcjonalna do liczby elementów w sekwencji (czas liniowy).
Hash_multimap powinien być wybranym kontenerem asocjacyjnym, gdy warunki kojarzenia wartości z kluczami są spełnione przez aplikację. Modelem dla tego typu struktury jest uporządkowana lista słów kluczowych ze skojarzonymi wartościami ciągów, dostarczająca np. definicje, w których słowa nie były zawsze zdefiniowane unikalnie. Jeśli zamiast tego słowa kluczowe zostały unikatowo zdefiniowane tak, aby klucze były unikatowe, hash_map byłby wybranym kontenerem. Jeśli z drugiej strony tylko lista wyrazów była przechowywana, hash_set będzie poprawnym kontenerem. Jeśli dozwolone było wiele wystąpień wyrazów, hash_multiset byłaby odpowiednią strukturą kontenera.
Hash_multimap porządkuje sekwencję, którą kontroluje, wywołując przechowywany obiekt skrótu Traits
typu value_compare. Dostęp do tego przechowywanego obiektu można uzyskać, wywołując funkcję składową key_comp. Taki obiekt funkcji musi zachowywać się tak samo jak obiekt klasy hash_compare<Key, less<Key>>
. W szczególności dla wszystkich wartości Key
typu wywołanie Traits (Key)
daje rozkład wartości typu size_t
Key
.
Ogólnie rzecz biorąc, elementy muszą być nieco mniej porównywalne, aby ustalić kolejność: tak aby, mając dowolne dwa elementy, można było określić, czy są one równoważne (w sensie, żaden nie jest mniejszy niż ten drugi) lub, że jeden jest mniejszy niż ten drugi. Powoduje to kolejność między elementami, które nie są równoważne. Ze strony bardziej technicznej, funkcja porównywania jest predykatem binarnym, który wymusza ścisłe słabe porządkowanie w standardowym sensie matematycznym. Predykat binarny f(x, y) jest obiektem funkcji, który ma dwa obiekty argumentów x
i y
zwracaną wartość true
lub false
. Kolejność nałożona na hash_multimap to ścisłe słabe porządkowanie, jeśli predykat binarny jest nieelastycznym, antysymetrycznym i przechodnim, a jeśli równoważność jest przechodnia, gdzie dwa obiekty x
i y
są zdefiniowane jako równoważne, gdy oba f(x, y) i f(y, x) to false
. Jeśli silniejszy warunek równości pomiędzy kluczami zastąpi ten równoważności, to porządkowanie będzie całkowite (w sensie, że wszystkie elementy są uporządkowane względem siebie), a dopasowane klucze będą od siebie nieodróżnialne.
Rzeczywista kolejność elementów w kontrolowanej sekwencji zależy od funkcji skrótu, funkcji porządkowania i bieżącego rozmiaru tabeli skrótów przechowywanej w obiekcie kontenera. Nie można określić bieżącego rozmiaru tabeli skrótów, więc nie można ogólnie przewidzieć kolejności elementów w kontrolowanej sekwencji. Wstawianie elementów nie unieważnia iteratorów, a usuwanie elementów unieważnia tylko te iteratory, które w szczególności wskazywały na usunięte elementy.
Iterator dostarczony przez klasę hash_multimap jest iteratorem dwukierunkowym, ale funkcje składowe klasy wstawiają i hash_multimap mają wersje, które przyjmują jako parametry szablonu słabszy iterator wejściowy, którego wymagania dotyczące funkcjonalności są bardziej minimalne niż te gwarantowane przez klasę iteratorów dwukierunkowych. Pojęcia innych iteratorów formują rodzinę powiązaną przez udoskonalenia w ich funkcjonalnościach. Każda koncepcja iteratora ma własne hash_multimap wymagań, a algorytmy, które z nimi współpracują, muszą ograniczyć swoje założenia do wymagań dostarczonych przez ten typ iteratora. Można założyć, że z iteratora danych wejściowych można usunąć odwołanie, aby odwołać się do obiektu, a także, że może on być zwiększony do następnego iteratora w sekwencji. Jest to minimalna hash_multimap funkcjonalności, ale wystarczy, aby móc mówić znacząco o zakresie iteratorów [First, Last)
w kontekście funkcji składowych.
Konstruktory
Konstruktor | opis |
---|---|
hash_multimap | Tworzy listę określonego rozmiaru lub z elementami określonej wartości lub z określoną allocator lub kopią innej hash_multimap wartości . |
Typedefs
Nazwa typu | opis |
---|---|
allocator_type | Typ reprezentujący klasę allocator hash_multimap dla obiektu. |
const_iterator | Typ, który udostępnia iterator dwukierunkowy, który może odczytać const element w obiekcie hash_multimap . |
const_pointer | Typ, który dostarcza wskaźnik do const elementu w obiekcie hash_multimap . |
const_reference | Typ, który zawiera odwołanie do elementu przechowywanego const w hash_multimap obiekcie do odczytu i wykonywania const operacji. |
const_reverse_iterator | Typ, który udostępnia iterator dwukierunkowy, który może odczytywać dowolny const element w obiekcie hash_multimap . |
difference_type | Typ liczby całkowitej ze znakiem, który może służyć do reprezentowania liczby elementów hash_multimap w zakresie między elementami wskazywanym przez iteratory. |
Sterująca | Typ, który udostępnia iterator dwukierunkowy, który może odczytywać lub modyfikować dowolny element w obiekcie hash_multimap . |
key_compare | Typ, który udostępnia obiekt funkcji, który może porównać dwa klucze sortowania, aby określić względną kolejność dwóch elementów w obiekcie hash_multimap . |
key_type | Typ opisujący obiekt klucza sortowania, który stanowi każdy element obiektu hash_multimap . |
mapped_type | Typ reprezentujący typ danych przechowywany w obiekcie hash_multimap . |
wskaźnik | Typ, który dostarcza wskaźnik do elementu w elemecie hash_multimap . |
odniesienie | Typ, który zawiera odwołanie do elementu przechowywanego w obiekcie hash_multimap . |
reverse_iterator | Typ, który udostępnia iterator dwukierunkowy, który może odczytywać lub modyfikować element w odwróconym hash_multimap obiekcie . |
size_type | Niepodpisany typ liczb całkowitych, który może reprezentować liczbę elementów w obiekcie hash_multimap . |
value_type | Typ, który udostępnia obiekt funkcji, który może porównać dwa elementy jako klucze sortowania, aby określić ich względną kolejność w obiekcie hash_multimap . |
Funkcje składowe
Funkcja składowa | opis |
---|---|
zaczynać | Zwraca iterator odnoszący się do pierwszego elementu w elemecie hash_multimap . |
cbegin | Zwraca iterator const odnoszący się do pierwszego elementu w obiekcie hash_multimap . |
cend | Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w elemecie hash_multimap . |
jasny | Usuwa wszystkie elementy elementu hash_multimap . |
count | Zwraca liczbę elementów w kluczu hash_multimap , których klucz pasuje do klucza określonego parametrem. |
crbegin | Zwraca iterator const odnoszący się do pierwszego elementu w odwróconym hash_multimap obiekcie . |
crend | Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconym elemecie hash_multimap . |
miejsce | Wstawia element skonstruowany w miejscu do elementu hash_multimap . |
emplace_hint | Wstawia element skonstruowany w miejscu do hash_multimap elementu z wskazówką umieszczania. |
empty | Sprawdza, czy element hash_multimap jest pusty. |
koniec | Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w elemecie hash_multimap . |
equal_range | Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w elemecie hash_multimap . |
wymazać | Usuwa element lub zakres elementów z hash_multimap określonych pozycji |
find | Zwraca iterator odnoszący się do lokalizacji elementu w obiekcie hash_multimap , który ma klucz odpowiadający określonemu kluczowi. |
get_allocator | Zwraca kopię obiektu używanego allocator do konstruowania obiektu hash_multimap . |
wstawiać | Wstawia element lub zakres elementów do hash_multimap obiektu w określonej pozycji. |
key_comp | Pobiera kopię obiektu porównania używanego do zamawiania kluczy w obiekcie hash_multimap . |
lower_bound | Zwraca iterator do pierwszego elementu w obiekcie hash_multimap z wartością klucza, która jest równa lub większa od określonego klucza. |
max_size | Zwraca maksymalną długość obiektu hash_multimap . |
rbegin | Zwraca iterator odnoszący się do pierwszego elementu w odwróconym hash_multimap obiekcie . |
drzeć | Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconym elemecie hash_multimap . |
rozmiar | Określa nowy rozmiar elementu hash_multimap . |
zamiana | Wymienia elementy dwóch hash_multimap s. |
upper_bound | Zwraca iterator do pierwszego elementu w obiekcie hash_multimap z wartością klucza większą niż określony klucz. |
value_comp | Pobiera kopię obiektu porównania używanego do porządkowenia wartości elementów w obiekcie hash_multimap . |
Operatory
Operator | opis |
---|---|
hash_multimap::operator= | Zastępuje elementy elementu hash_multimap kopią innego hash_multimap elementu . |
Wymagania
Nagłówek:<hash_map>
Przestrzeń nazw: stdext
hash_multimap::allocator_type
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ reprezentujący klasę alokatora dla obiektu hash_multimap.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::allocator_type allocator_type;
Uwagi
allocator_type
jest synonimem parametru Allocator
szablonu .
Aby uzyskać więcej informacji na temat Allocator
programu , zobacz sekcję Uwagi w temacie hash_multimap Class (Klasa hash_multimap).
Przykład
Zobacz przykład get_allocator, aby zapoznać się z przykładem przy użyciu polecenia allocator_type
.
hash_multimap::begin
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator odnoszący się do pierwszego elementu w hash_multimap.
const_iterator begin() const;
iterator begin();
Wartość zwracana
Iterator dwukierunkowy odnoszący się do pierwszego elementu w hash_multimap lub lokalizacji, która kończy się powodzeniem pustej hash_multimap.
Uwagi
Jeśli zwracana wartość begin
elementu jest przypisana do const_iterator
obiektu , nie można modyfikować elementów w obiekcie hash_multimap. Jeśli wartość zwracana begin
elementu jest przypisana do iterator
obiektu , elementy w obiekcie hash_multimap można modyfikować.
Przykład
// hash_multimap_begin.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: iterator hm1_Iter;
hash_multimap <int, int> :: const_iterator hm1_cIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 0, 0 ) );
hm1.insert ( Int_Pair ( 1, 1 ) );
hm1.insert ( Int_Pair ( 2, 4 ) );
hm1_cIter = hm1.begin ( );
cout << "The first element of hm1 is " << hm1_cIter -> first
<< "." << endl;
hm1_Iter = hm1.begin ( );
hm1.erase ( hm1_Iter );
// The following 2 lines would err because the iterator is const
// hm1_cIter = hm1.begin ( );
// hm1.erase ( hm1_cIter );
hm1_cIter = hm1.begin( );
cout << "The first element of hm1 is now " << hm1_cIter -> first
<< "." << endl;
}
The first element of hm1 is 0.
The first element of hm1 is now 1.
hash_multimap::cbegin
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator const odnoszący się do pierwszego elementu w hash_multimap.
const_iterator cbegin() const;
Wartość zwracana
Iterator dwukierunkowy odnoszący się do pierwszego elementu w hash_multimap lub lokalizacji, która zakończyła się powodzeniem pustego hash_multimap
elementu .
Przykład
// hash_multimap_cbegin.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_iterator hm1_cIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 2, 4 ) );
hm1_cIter = hm1.cbegin ( );
cout << "The first element of hm1 is "
<< hm1_cIter -> first << "." << endl;
}
The first element of hm1 is 2.
hash_multimap::cend
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multimap.
const_iterator cend() const;
Wartość zwracana
Iterator dwukierunkowy, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multimap. Jeśli wartość jest pusta hash_multimap
, to hash_multimap::cend == hash_multimap::begin
.
Uwagi
cend
służy do testowania, czy iterator osiągnął koniec hash_multimap.
Wartość zwracana przez cend
nie powinna być wyłuszczone.
Przykład
// hash_multimap_cend.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_iterator hm1_cIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_cIter = hm1.cend( );
hm1_cIter--;
cout << "The value of last element of hm1 is "
<< hm1_cIter -> second << "." << endl;
}
The value of last element of hm1 is 30.
hash_multimap::clear
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Usuwa wszystkie elementy hash_multimap.
void clear();
Uwagi
Przykład
W poniższym przykładzie pokazano użycie funkcji składowej hash_multimap::clear.
// hash_multimap_clear.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
hash_multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 1));
hm1.insert(Int_Pair(2, 4));
i = hm1.size();
cout << "The size of the hash_multimap is initially "
<< i << "." << endl;
hm1.clear();
i = hm1.size();
cout << "The size of the hash_multimap after clearing is "
<< i << "." << endl;
}
The size of the hash_multimap is initially 2.
The size of the hash_multimap after clearing is 0.
hash_multimap::const_iterator
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który udostępnia iterator dwukierunkowy, który może odczytać const
element w hash_multimap.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::const_iterator const_iterator;
Uwagi
Nie można użyć typu const_iterator
do modyfikowania wartości elementu.
Zdefiniowany const_iterator
przez hash_multimap wskazuje obiekty value_type, które są typu pair<const Key, Type>
. Wartość klucza jest dostępna za pośrednictwem pierwszej pary składowej, a wartość zamapowanego elementu jest dostępna za pośrednictwem drugiego elementu członkowskiego pary.
Aby wyłudić const_iterator
cIter
element w hash_multimap, użyj ->
operatora .
Aby uzyskać dostęp do wartości klucza dla elementu, użyj elementu cIter->first
, który jest odpowiednikiem (*cIter).first
. Aby uzyskać dostęp do wartości mapowanej datum dla elementu, użyj elementu cIter->second
, który jest odpowiednikiem (*cIter).second
.
Przykład
Zobacz przykład, aby zapoznać się z przykładem przy użyciu polecenia const_iterator
.
hash_multimap::const_pointer
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który dostarcza wskaźnik do const
elementu w hash_multimap.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::const_pointer const_pointer;
Uwagi
Nie można użyć typu const_pointer
do modyfikowania wartości elementu.
W większości przypadków iterator powinien być używany do uzyskiwania dostępu do elementów w obiekcie hash_multimap.
hash_multimap::const_reference
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który zawiera odwołanie do elementu przechowywanego const
w hash_multimap do odczytywania i wykonywania const
operacji.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::const_reference const_reference;
Uwagi
Przykład
// hash_multimap_const_ref.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
// Declare and initialize a const_reference &Ref1
// to the key of the first element
const int &Ref1 = ( hm1.begin( ) -> first );
// The following line would cause an error because the
// non-const_reference cannot be used to access the key
// int &Ref1 = ( hm1.begin( ) -> first );
cout << "The key of first element in the hash_multimap is "
<< Ref1 << "." << endl;
// Declare and initialize a reference &Ref2
// to the data value of the first element
int &Ref2 = ( hm1.begin() -> second );
cout << "The data value of 1st element in the hash_multimap is "
<< Ref2 << "." << endl;
}
The key of first element in the hash_multimap is 1.
The data value of 1st element in the hash_multimap is 10.
hash_multimap::const_reverse_iterator
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który udostępnia iterator dwukierunkowy, który może odczytywać dowolny const
element w hash_multimap.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::const_reverse_iterator const_reverse_iterator;
Uwagi
Typ const_reverse_iterator
nie może zmodyfikować wartości elementu i jest używany do iterowania przez hash_multimap odwrotnie.
Zdefiniowany const_reverse_iterator
przez hash_multimap wskazuje obiekty value_type, które są typu pair<const Key, Type>
, którego pierwszy element członkowski jest kluczem do elementu i którego drugi element członkowski jest mapowanym datą przechowywaną przez element.
Aby wyłudić const_reverse_iterator
crIter
element w hash_multimap, użyj ->
operatora .
Aby uzyskać dostęp do wartości klucza dla elementu, użyj elementu crIter->first
, który jest odpowiednikiem (*crIter).first
. Aby uzyskać dostęp do wartości mapowanej datum dla elementu, użyj elementu crIter->second
, który jest odpowiednikiem (*crIter).second
.
Przykład
Zobacz przykład nazwy rend, aby zapoznać się z przykładem sposobu deklarowania i używania elementu const_reverse_iterator
.
hash_multimap::count
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca liczbę elementów w hash_multimap, których klucz pasuje do klucza określonego parametrem.
size_type count(const Key& key) const;
Parametry
key
Klucz elementów do dopasowania z hash_multimap.
Wartość zwracana
1, jeśli hash_multimap zawiera element, którego klucz sortowania pasuje do klucza parametru; 0, jeśli hash_multimap nie zawiera elementu z pasującym kluczem.
Uwagi
Funkcja składowa zwraca liczbę elementów w zakresie
[lower_bound ( key
), upper_bound ( key
) )
które mają klucz wartości klucza.
Przykład
W poniższym przykładzie pokazano użycie funkcji składowej hash_multimap::count.
// hash_multimap_count.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
hash_multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 1));
hm1.insert(Int_Pair(2, 1));
hm1.insert(Int_Pair(1, 4));
hm1.insert(Int_Pair(2, 1));
// Elements do not need to have unique keys in hash_multimap,
// so duplicates are allowed and counted
i = hm1.count(1);
cout << "The number of elements in hm1 with a sort key of 1 is: "
<< i << "." << endl;
i = hm1.count(2);
cout << "The number of elements in hm1 with a sort key of 2 is: "
<< i << "." << endl;
i = hm1.count(3);
cout << "The number of elements in hm1 with a sort key of 3 is: "
<< i << "." << endl;
}
The number of elements in hm1 with a sort key of 1 is: 2.
The number of elements in hm1 with a sort key of 2 is: 2.
The number of elements in hm1 with a sort key of 3 is: 0.
hash_multimap::crbegin
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator const odnoszący się do pierwszego elementu w odwróconej hash_multimap.
const_reverse_iterator crbegin() const;
Wartość zwracana
Odwrotny iterator dwukierunkowy odnoszący się do pierwszego elementu w odwróconym hash_multimap lub odnoszący się do tego, co było ostatnim elementem w niewróceniu hash_multimap
.
Uwagi
crbegin
jest używany z odwróconym hash_multimap tak samo jak hash_multimap::begin jest używany z .hash_multimap
Przy użyciu wartości zwracanej crbegin
hash_multimap
obiektu nie można modyfikować.
crbegin
może służyć do iterowania przez hash_multimap
tyły.
Przykład
// hash_multimap_crbegin.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_reverse_iterator hm1_crIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_crIter = hm1.crbegin( );
cout << "The first element of the reversed hash_multimap hm1 is "
<< hm1_crIter -> first << "." << endl;
}
The first element of the reversed hash_multimap hm1 is 3.
hash_multimap::crend
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconej hash_multimap.
const_reverse_iterator crend() const;
Wartość zwracana
Odwrotny iterator dwukierunkowy, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconej hash_multimap (lokalizacja, która poprzedzała pierwszy element w niereversedowanym hash_multimap
elemecie ).
Uwagi
crend
jest używany z odwróconym hash_multimap tak samo jak hash_multimap::end jest używany z hash_multimap.
Przy użyciu wartości zwracanej crend
hash_multimap
obiektu nie można modyfikować.
crend
można użyć do sprawdzenia, czy iterator odwrotny osiągnął koniec jego hash_multimap.
Wartość zwracana przez crend
nie powinna być wyłuszczone.
Przykład
// hash_multimap_crend.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_reverse_iterator hm1_crIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_crIter = hm1.crend( );
hm1_crIter--;
cout << "The last element of the reversed hash_multimap hm1 is "
<< hm1_crIter -> first << "." << endl;
}
The last element of the reversed hash_multimap hm1 is 3.
hash_multimap::d ifference_type
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ liczby całkowitej ze znakiem, który może służyć do reprezentowania liczby elementów hash_multimap w zakresie między elementami wskazywanym przez iteratory.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::difference_type difference_type;
Uwagi
Jest difference_type
to typ zwracany podczas odejmowania lub przyrostowania przez iteratory kontenera. Element difference_type
jest zwykle używany do reprezentowania liczby elementów w zakresie [pierwszy, ostatni) między iteratorami first
i last
, zawiera element wskazywany przez first
i zakres elementów do, ale nie uwzględnia elementu wskazywanego przez last
.
Należy pamiętać, że chociaż difference_type
jest dostępny dla wszystkich iteratorów spełniających wymagania iteratora wejściowego, który obejmuje klasę iteratorów dwukierunkowych obsługiwanych przez kontenery odwracalne, takie jak zestaw, odejmowanie między iteratorami jest obsługiwane tylko przez iteratory dostępu losowego udostępniane przez kontener dostępu losowego, taki jak wektor.
Przykład
// hash_multimap_difference_type.cpp
// compile with: /EHsc
#include <iostream>
#include <hash_map>
#include <algorithm>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(2, 20));
hm1.insert(Int_Pair(1, 10));
hm1.insert(Int_Pair(3, 20));
// The following will insert, because map keys
// do not need to be unique
hm1.insert(Int_Pair(2, 30));
hash_multimap<int, int>::iterator hm1_Iter, hm1_bIter, hm1_eIter;
hm1_bIter = hm1.begin();
hm1_eIter = hm1.end();
// Count the number of elements in a hash_multimap
hash_multimap<int, int>::difference_type df_count = 0;
hm1_Iter = hm1.begin();
while (hm1_Iter != hm1_eIter)
{
df_count++;
hm1_Iter++;
}
cout << "The number of elements in the hash_multimap hm1 is: "
<< df_count << "." << endl;
cout << "The keys of the mapped elements are:";
for (hm1_Iter= hm1.begin() ; hm1_Iter!= hm1.end();
hm1_Iter++)
cout << " " << hm1_Iter-> first;
cout << "." << endl;
cout << "The values of the mapped elements are:";
for (hm1_Iter= hm1.begin() ; hm1_Iter!= hm1.end();
hm1_Iter++)
cout << " " << hm1_Iter-> second;
cout << "." << endl;
}
The number of elements in the hash_multimap hm1 is: 4.
The keys of the mapped elements are: 1 2 2 3.
The values of the mapped elements are: 10 20 30 20.
hash_multimap::emplace
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Wstawia element skonstruowany w miejscu do hash_multimap.
template <class ValTy>
iterator emplace(ValTy&& val);
Parametry
Val
Wartość używana do przenoszenia konstrukcji elementu, który ma zostać wstawiony do hash_multimap.
Wartość zwracana
Funkcja emplace
składowa zwraca iterator wskazujący położenie, w którym wstawiono nowy element.
Uwagi
Hash_multimap ::value_type elementu jest parą, dzięki czemu wartość elementu będzie uporządkowaną parą z pierwszym składnikiem równym wartości klucza i drugiemu składnikowi równemu wartości danych elementu.
Przykład
// hash_multimap_emplace.cpp
// compile with: /EHsc
#include<hash_multimap>
#include<iostream>
#include <string>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, string> hm1;
typedef pair<int, string> is1(1, "a");
hm1.emplace(move(is1));
cout << "After the emplace, hm1 contains:" << endl
<< " " << hm1.begin()->first
<< " => " << hm1.begin()->second
<< endl;
}
After the emplace insertion, hm1 contains:
1 => a
hash_multimap::emplace_hint
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Wstawia element skonstruowany na miejsce w hash_multimap z wskazówką umieszczania.
template <class ValTy>
iterator emplace_hint(
const_iterator _Where,
ValTy&& val);
Parametry
Val
Wartość używana do przenoszenia konstrukcji elementu, który ma zostać wstawiony do hash_multimap , chyba że hash_multimap
już zawiera ten element (lub, ogólniej, element, którego klucz jest równoważnie uporządkowany).
_Gdzie
Wskazówka dotycząca miejsca, w którym należy rozpocząć wyszukiwanie poprawnego punktu wstawiania.
Wartość zwracana
Funkcja składowa hash_multimap::emplace zwraca iterator wskazujący położenie, w którym nowy element został wstawiony do hash_multimap
elementu .
Uwagi
Hash_multimap ::value_type elementu jest parą, dzięki czemu wartość elementu będzie uporządkowaną parą z pierwszym składnikiem równym wartości klucza i drugiemu składnikowi równemu wartości danych elementu.
Wstawienie może wystąpić w amortyzowanym czasie stałym, a nie w czasie logarytmicznych, jeśli punkt wstawiania natychmiast następuje _Where.
Przykład
// hash_multimap_emplace_hint.cpp
// compile with: /EHsc
#include<hash_multimap>
#include<iostream>
#include <string>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, string> hm1;
typedef pair<int, string> is1(1, "a");
hm1.emplace(hm1.begin(), move(is1));
cout << "After the emplace insertion, hm1 contains:" << endl
<< " " << hm1.begin()->first
<< " => " << hm1.begin()->second
<< endl;
}
After the emplace insertion, hm1 contains:
1 => a
hash_multimap::empty
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Sprawdza, czy hash_multimap jest pusta.
bool empty() const;
Wartość zwracana
true
jeśli hash_multimap jest pusta; false
jeśli hash_multimap jest brak.
Uwagi
Przykład
// hash_multimap_empty.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1, hm2;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 1 ) );
if ( hm1.empty( ) )
cout << "The hash_multimap hm1 is empty." << endl;
else
cout << "The hash_multimap hm1 is not empty." << endl;
if ( hm2.empty( ) )
cout << "The hash_multimap hm2 is empty." << endl;
else
cout << "The hash_multimap hm2 is not empty." << endl;
}
The hash_multimap hm1 is not empty.
The hash_multimap hm2 is empty.
hash_multimap::end
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multimap.
const_iterator end() const;
iterator end();
Wartość zwracana
Iterator dwukierunkowy, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multimap. Jeśli hash_multimap jest pusta, hash_multimap::end == hash_multimap::begin.
Uwagi
end
służy do testowania, czy iterator osiągnął koniec hash_multimap.
Wartość zwracana przez end
nie powinna być wyłuszczone.
Przykład
// hash_multimap_end.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: iterator hm1_Iter;
hash_multimap <int, int> :: const_iterator hm1_cIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_cIter = hm1.end( );
hm1_cIter--;
cout << "The value of last element of hm1 is "
<< hm1_cIter -> second << "." << endl;
hm1_Iter = hm1.end( );
hm1_Iter--;
hm1.erase ( hm1_Iter );
// The following 2 lines would err because the iterator is const
// hm1_cIter = hm1.end ( );
// hm1_cIter--;
// hm1.erase ( hm1_cIter );
hm1_cIter = hm1.end( );
hm1_cIter--;
cout << "The value of last element of hm1 is now "
<< hm1_cIter -> second << "." << endl;
}
The value of last element of hm1 is 30.
The value of last element of hm1 is now 20.
hash_multimap::equal_range
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca parę iteratorów odpowiednio do pierwszego elementu w hash_multimap z kluczem większym niż określony klucz i do pierwszego elementu w hash_multimap z kluczem równym lub większym niż klucz.
pair <const_iterator, const_iterator> equal_range (const Key& key) const;
pair <iterator, iterator> equal_range (const Key& key);
Parametry
key
Klucz argumentu do porównania z kluczem sortowania elementu z przeszukiwanego hash_multimap.
Wartość zwracana
Para iteratorów tak, że pierwszy jest lower_bound klucza, a drugi jest upper_bound klucza.
Aby uzyskać dostęp do pierwszego iteratora pary pr
zwróconej przez funkcję składową, użyj polecenia pr
. najpierw i wyłuszczyć iterator dolnej granicy, użyj *( pr
. pierwszy). Aby uzyskać dostęp do drugiego iteratora pary pr
zwróconej przez funkcję składową, użyj polecenia pr
. drugi i aby wyłuskać iterator górnej granicy, użyj *( pr
. sekunda).
Uwagi
Przykład
// hash_multimap_equal_range.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
typedef hash_multimap <int, int> IntMMap;
IntMMap hm1;
hash_multimap <int, int> :: const_iterator hm1_RcIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
pair <IntMMap::const_iterator, IntMMap::const_iterator> p1, p2;
p1 = hm1.equal_range( 2 );
cout << "The lower bound of the element with a key of 2\n"
<< "in the hash_multimap hm1 is: "
<< p1.first -> second << "." << endl;
cout << "The upper bound of the element with a key of 2\n"
<< "in the hash_multimap hm1 is: "
<< p1.second -> second << "." << endl;
// Compare the upper_bound called directly
hm1_RcIter = hm1.upper_bound( 2 );
cout << "A direct call of upper_bound( 2 ) gives "
<< hm1_RcIter -> second << "," << endl
<< "matching the 2nd element of the pair "
<< "returned by equal_range( 2 )." << endl;
p2 = hm1.equal_range( 4 );
// If no match is found for the key,
// both elements of the pair return end( )
if ( ( p2.first == hm1.end( ) ) && ( p2.second == hm1.end( ) ) )
cout << "The hash_multimap hm1 doesn't have an element "
<< "with a key less than 4." << endl;
else
cout << "The element of hash_multimap hm1 with a key >= 40 is: "
<< p1.first -> first << "." << endl;
}
The lower bound of the element with a key of 2
in the hash_multimap hm1 is: 20.
The upper bound of the element with a key of 2
in the hash_multimap hm1 is: 30.
A direct call of upper_bound( 2 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 2 ).
The hash_multimap hm1 doesn't have an element with a key less than 4.
hash_multimap::erase
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Usuwa element lub zakres elementów w hash_multimap z określonych pozycji lub usuwa elementy zgodne z określonym kluczem.
iterator erase(iterator _Where);
iterator erase(iterator first, iterator last);
size_type erase(const key_type& key);
Parametry
_Gdzie
Położenie elementu do usunięcia z hash_multimap.
pierwszy
Pozycja pierwszego elementu usunięta z hash_multimap.
ostatni
Pozycja tuż poza ostatnim elementem usuniętym z hash_multimap.
key
Klucz elementów do usunięcia z hash_multimap.
Wartość zwracana
W przypadku pierwszych dwóch funkcji składowych iterator dwukierunkowy, który wyznacza pierwszy element pozostały poza usuniętymi elementami lub wskaźnik na końcu hash_multimap, jeśli taki element nie istnieje.
W przypadku trzeciej funkcji składowej zwraca liczbę elementów, które zostały usunięte z hash_multimap.
Uwagi
Funkcje składowe nigdy nie zgłaszają wyjątku.
Przykład
W poniższym przykładzie pokazano użycie funkcji składowej hash_multimap::erase.
// hash_multimap_erase.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1, hm2, hm3;
hash_multimap<int, int> :: iterator pIter, Iter1, Iter2;
int i;
hash_multimap<int, int>::size_type n;
typedef pair<int, int> Int_Pair;
for (i = 1; i < 5; i++)
{
hm1.insert(Int_Pair (i, i) );
hm2.insert(Int_Pair (i, i*i) );
hm3.insert(Int_Pair (i, i-1) );
}
// The 1st member function removes an element at a given position
Iter1 = ++hm1.begin();
hm1.erase(Iter1);
cout << "After the 2nd element is deleted, "
<< "the hash_multimap hm1 is:";
for (pIter = hm1.begin(); pIter != hm1.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
// The 2nd member function removes elements
// in the range [ first, last)
Iter1 = ++hm2.begin();
Iter2 = --hm2.end();
hm2.erase(Iter1, Iter2);
cout << "After the middle two elements are deleted, "
<< "the hash_multimap hm2 is:";
for (pIter = hm2.begin(); pIter != hm2.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
// The 3rd member function removes elements with a given key
hm3.insert(Int_Pair (2, 5));
n = hm3.erase(2);
cout << "After the element with a key of 2 is deleted,\n"
<< "the hash_multimap hm3 is:";
for (pIter = hm3.begin(); pIter != hm3.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
// The 3rd member function returns the number of elements removed
cout << "The number of elements removed from hm3 is: "
<< n << "." << endl;
// The dereferenced iterator can also be used to specify a key
Iter1 = ++hm3.begin();
hm3.erase(Iter1);
cout << "After another element with a key equal to that of the"
<< endl;
cout << "2nd element is deleted, "
<< "the hash_multimap hm3 is:";
for (pIter = hm3.begin(); pIter != hm3.end(); pIter++)
cout << " " << pIter -> second;
cout << "." << endl;
}
After the 2nd element is deleted, the hash_multimap hm1 is: 1 3 4.
After the middle two elements are deleted, the hash_multimap hm2 is: 1 16.
After the element with a key of 2 is deleted,
the hash_multimap hm3 is: 0 2 3.
The number of elements removed from hm3 is: 2.
After another element with a key equal to that of the
2nd element is deleted, the hash_multimap hm3 is: 0 3.
hash_multimap::find
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator odnoszący się do pierwszej lokalizacji elementu w hash_multimap, który ma klucz odpowiadający określonemu kluczowi.
iterator find(const Key& key);
const_iterator find(const Key& key) const;
Parametry
key
Klucz do dopasowania według klucza sortowania elementu z przeszukiwanego hash_multimap.
Wartość zwracana
Iterator, który adresuje pierwszą lokalizację elementu z określonym kluczem, lub lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multimap, jeśli nie zostanie znalezione dopasowanie klucza.
Uwagi
Funkcja składowa zwraca iterator, który adresuje element w hash_multimap, którego kluczem sortowania jest equivalent
klucz argumentu w predykacie binarnym, który wywołuje kolejność na podstawie relacji mniejszej niż porównywalność.
Jeśli wartość zwracana find
elementu jest przypisana do const_iterator
obiektu , nie można zmodyfikować obiektu hash_multimap. Jeśli wartość zwracana find
elementu jest przypisana do iterator
obiektu , można zmodyfikować obiekt hash_multimap.
Przykład
// hash_multimap_find.cpp
// compile with: /EHsc
#include <iostream>
#include <hash_map>
int main()
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1;
hash_multimap<int, int> :: const_iterator hm1_AcIter, hm1_RcIter;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 10));
hm1.insert(Int_Pair(2, 20));
hm1.insert(Int_Pair(3, 20));
hm1.insert(Int_Pair(3, 30));
hm1_RcIter = hm1.find(2);
cout << "The element of hash_multimap hm1 with a key of 2 is: "
<< hm1_RcIter -> second << "." << endl;
hm1_RcIter = hm1.find(3);
cout << "The first element of hash_multimap hm1 with a key of 3 is: "
<< hm1_RcIter -> second << "." << endl;
// If no match is found for the key, end() is returned
hm1_RcIter = hm1.find(4);
if (hm1_RcIter == hm1.end())
cout << "The hash_multimap hm1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of hash_multimap hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
// The element at a specific location in the hash_multimap can be
// found using a dereferenced iterator addressing the location
hm1_AcIter = hm1.end();
hm1_AcIter--;
hm1_RcIter = hm1.find(hm1_AcIter -> first);
cout << "The first element of hm1 with a key matching"
<< endl << "that of the last element is: "
<< hm1_RcIter -> second << "." << endl;
// Note that the first element with a key equal to
// the key of the last element is not the last element
if (hm1_RcIter == --hm1.end())
cout << "This is the last element of hash_multimap hm1."
<< endl;
else
cout << "This is not the last element of hash_multimap hm1."
<< endl;
}
The element of hash_multimap hm1 with a key of 2 is: 20.
The first element of hash_multimap hm1 with a key of 3 is: 20.
The hash_multimap hm1 doesn't have an element with a key of 4.
The first element of hm1 with a key matching
that of the last element is: 20.
This is not the last element of hash_multimap hm1.
hash_multimap::get_allocator
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca kopię obiektu alokatora używanego do konstruowania hash_multimap.
Allocator get_allocator() const;
Wartość zwracana
Alokator używany przez hash_multimap.
Uwagi
Alokatory dla klasy hash_multimap określają sposób zarządzania magazynem przez klasę. Domyślne alokatory dostarczane z klasami kontenerów biblioteki standardowej języka C++ są wystarczające dla większości potrzeb programistycznych. Pisanie i używanie własnej klasy alokatora jest zaawansowanym tematem języka C++.
Przykład
// hash_multimap_get_allocator.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int>::allocator_type hm1_Alloc;
hash_multimap <int, int>::allocator_type hm2_Alloc;
hash_multimap <int, double>::allocator_type hm3_Alloc;
hash_multimap <int, int>::allocator_type hm4_Alloc;
// The following lines declare objects
// that use the default allocator.
hash_multimap <int, int> hm1;
hash_multimap <int, int> hm2;
hash_multimap <int, double> hm3;
hm1_Alloc = hm1.get_allocator( );
hm2_Alloc = hm2.get_allocator( );
hm3_Alloc = hm3.get_allocator( );
cout << "The number of integers that can be allocated"
<< endl << " before free memory is exhausted: "
<< hm2.max_size( ) << "." << endl;
cout << "The number of doubles that can be allocated"
<< endl << " before free memory is exhausted: "
<< hm3.max_size( ) << "." << endl;
// The following line creates a hash_multimap hm4
// with the allocator of hash_multimap hm1.
hash_multimap <int, int> hm4( less<int>( ), hm1_Alloc );
hm4_Alloc = hm4.get_allocator( );
// Two allocators are interchangeable if
// storage allocated from each can be
// deallocated by the other
if( hm1_Alloc == hm4_Alloc )
{
cout << "The allocators are interchangeable."
<< endl;
}
else
{
cout << "The allocators are not interchangeable."
<< endl;
}
}
hash_multimap::hash_multimap
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Tworzy hash_multimap, który jest pusty lub jest kopią wszystkich lub części innych hash_multimap.
hash_multimap();
explicit hash_multimap(
const Compare& Comp);
hash_multimap(
const Compare& Comp,
const Allocator& Al);
hash_multimap(
const hash_multimap& Right);
hash_multimap(
hash_multimap&& Right);
hash_multimap(
initializer_list<Type> IList);
hash_multimap(
initializer_list<Type> IList,
const Compare& Comp);
hash_multimap(
initializer_list<Type> IList,
const Compare& Comp,
const Allocator& Al);
template <class InputIterator>
hash_multimap(
InputIterator First,
InputIterator Last);
template <class InputIterator>
hash_multimap(
InputIterator First,
InputIterator Last,
const Compare& Comp);
template <class InputIterator>
hash_multimap(
InputIterator First,
InputIterator Last,
const Compare& Comp,
const Allocator& Al);
Parametry
Al
Klasa alokatora magazynu, która ma być używana dla tego obiektu hash_multimap, który domyślnie ma wartość Allocator
.
Komp
Funkcja porównania typu const Traits
używana do porządkowenia elementów na mapie, która jest domyślnie ustawiona na Traits
.
Right
Mapa, której skonstruowany zestaw ma być kopią.
Pierwszy
Położenie pierwszego elementu w zakresie elementów do skopiowania.
Ostatni
Położenie pierwszego elementu poza zakresem elementów do skopiowania.
IList
Initializer_list do skopiowania.
Uwagi
Wszystkie konstruktory przechowują typ obiektu alokatora, który zarządza magazynem pamięci dla hash_multimap i które można później zwrócić przez wywołanie get_allocator. Parametr alokatora jest często pomijany w deklaracjach klas, a makra przetwarzania wstępnego są używane do zastępowania alternatywnych alokatorów.
Wszystkie konstruktory inicjują ich hash_multimap.
Wszystkie konstruktory przechowują obiekt funkcji typu Traits
, który służy do ustanawiania kolejności między kluczami hash_multimap, a później może zostać zwrócony przez wywołanie key_comp.
Pierwsze trzy konstruktory określają pustą hash_multimap początkową; drugi określa typ funkcji porównania (Comp), która ma być używana w ustanawianiu kolejności elementów, a trzeci jawnie określa typ alokatora (_Al
) do użycia. Słowo kluczowe explicit
pomija niektóre rodzaje automatycznej konwersji typów.
Czwarty konstruktor określa kopię hash_multimap Right
.
Następne trzy konstruktory kopiują zakres First, Last)
mapy z rosnącą jawnością w określaniu typu funkcji porównania klasy Traits
i alokatora.
Ósmy konstruktor przenosi hash_multimap Right
.
Ostatnie trzy konstruktory używają initializer_list.
hash_multimap::insert
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Wstawia element lub zakres elementów do hash_multimap.
iterator insert(
const value_type& Val);
iterator insert(
const_iterator Where,
const value_type& Val);void insert(
initializer_list<value_type> IList);
template <class InputIterator>
void insert(
InputIterator First,
InputIterator Last);
template <class ValTy>
iterator insert(
ValTy&& Val);
template <class ValTy>
iterator insert(
const_iterator Where,
ValTy&& Val);
Parametry
Val
Wartość elementu, który ma zostać wstawiony do hash_multimap, chyba że zawiera już ten element, lub ogólniej, chyba że zawiera już element, którego klucz jest równoważnie uporządkowany.
Gdzie
Wskazówka dotycząca tego, gdzie rozpocząć wyszukiwanie poprawnego punktu wstawiania.
Pierwszy
Pozycja pierwszego elementu, który ma zostać skopiowany z mapy.
Ostatni
Pozycja tuż poza ostatnim elementem, który ma zostać skopiowany z mapy.
Wartość zwracana
Pierwsze dwie insert
funkcje składowe zwracają iterator wskazujący położenie, w którym wstawiono nowy element.
Trzecia funkcja składowa używa initializer_list do wstawienia elementów.
Czwarta funkcja składowa wstawia sekwencję wartości elementów do mapy odpowiadającej każdemu elementowi adresowanemu przez iterator w zakresie [First, Last)
określonego zestawu.
Ostatnie dwie insert
funkcje składowe zachowują się tak samo jak dwa pierwsze, z tą różnicą, że przenoszą wstawioną wartość.
Uwagi
Value_type elementu jest parą, więc wartość elementu będzie uporządkowaną parą, w której pierwszy składnik jest równy wartości klucza, a drugi składnik jest równy wartości danych elementu.
Wstawienie może wystąpić w amortyzowanym stałym czasie dla wersji insert
wskazówek elementu , zamiast czasu logarytmicznych, jeśli punkt wstawiania natychmiast następuje po instrukcji Where.
hash_multimap::iterator
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który udostępnia iterator dwukierunkowy, który może odczytywać lub modyfikować dowolny element w hash_multimap.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::iterator iterator;
Uwagi
Zdefiniowany iterator
przez hash_multimap wskazuje obiekty value_type, które są typu pair
<const Key, Type>, którego pierwszy element członkowski jest kluczem do elementu i którego drugi element członkowski jest mapowanym datą przechowywaną przez element.
Aby wyłudić iterator o nazwie Iter
, który wskazuje element w hash_multimap, użyj ->
operatora .
Aby uzyskać dostęp do wartości klucza dla elementu, użyj elementu Iter->first
, który jest odpowiednikiem (*Iter).first
. Aby uzyskać dostęp do wartości mapowanej datum dla elementu, użyj elementu Iter->second
, który jest odpowiednikiem (*Iter).first
.
iterator
Typ może służyć do modyfikowania wartości elementu.
Przykład
Zobacz przykład, aby zapoznać się z przykładem sposobu deklarowania i używania elementu iterator
.
hash_multimap::key_comp
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Pobiera kopię obiektu porównania używanego do zamawiania kluczy w hash_multimap.
key_compare key_comp() const;
Wartość zwracana
Zwraca obiekt funkcji, którego hash_multimap używa do zamawiania jego elementów.
Uwagi
Przechowywany obiekt definiuje funkcję składową
bool operator( const Key& left, const Key& right );
wartość , która zwraca wartość true
, jeśli left
jest poprzednia i nie jest równa right
w kolejności sortowania.
Przykład
// hash_multimap_key_comp.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int, hash_compare<int, less<int>>> hm1;
hash_multimap <int, int, hash_compare<int, less<int>>
>::key_compare kc1 = hm1.key_comp( ) ;
bool result1 = kc1( 2, 3 ) ;
if( result1 == true )
{
cout << "kc1( 2,3 ) returns value of true,\n"
<< "where kc1 is the function object of hm1.\n"
<< endl;
}
else
{
cout << "kc1( 2,3 ) returns value of false,\n"
<< "where kc1 is the function object of hm1.\n"
<< endl;
}
hash_multimap <int, int, hash_compare<int, greater<int>>> hm2;
hash_multimap <int, int, hash_compare<int, greater<int>>
>::key_compare kc2 = hm2.key_comp( );
bool result2 = kc2( 2, 3 ) ;
if( result2 == true )
{
cout << "kc2( 2,3 ) returns value of true,\n"
<< "where kc2 is the function object of hm2."
<< endl;
}
else
{
cout << "kc2( 2,3 ) returns value of false,\n"
<< "where kc2 is the function object of hm2."
<< endl;
}
}
hash_multimap::key_compare
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który udostępnia obiekt funkcji, który może porównać dwa klucze sortowania w celu określenia względnej kolejności dwóch elementów w hash_multimap.
typedef Traits key_compare;
Uwagi
key_compare
jest synonimem cech parametru szablonu.
Aby uzyskać więcej informacji na temat cech , zobacz temat Hash_multimap Class (Klasa hash_multimap).
Przykład
Zobacz przykład key_comp, aby zapoznać się z przykładem sposobu deklarowania i używania elementu key_compare
.
hash_multimap::key_type
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ opisujący obiekt klucza sortowania, który stanowi każdy element hash_multimap.
typedef Key key_type;
Uwagi
key_type
jest synonimem klucza parametru szablonu.
Aby uzyskać więcej informacji na temat klucza, zobacz sekcję Uwagi w temacie hash_multimap Class (Klasa hash_multimap).
Przykład
Zobacz przykład value_type, aby zapoznać się z przykładem sposobu deklarowania i używania elementu key_compare
.
hash_multimap::lower_bound
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator do pierwszego elementu w hash_multimap z kluczem równym lub większym niż określony klucz.
iterator lower_bound(const Key& key);
const_iterator lower_bound(const Key& key) const;
Parametry
key
Klucz argumentu do porównania z kluczem sortowania elementu z przeszukiwanego hash_multimap.
Wartość zwracana
Iterator lub const_iterator adresujący lokalizację elementu w hash_multimap za pomocą klucza równego lub większego niż klucz argumentu albo adresujący lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multimap, jeśli nie zostanie znalezione dopasowanie klucza.
Jeśli wartość zwracana lower_bound
elementu jest przypisana do const_iterator
obiektu , nie można zmodyfikować obiektu hash_multimap. Jeśli wartość zwracana lower_bound
elementu jest przypisana do iterator
obiektu , można zmodyfikować obiekt hash_multimap.
Uwagi
Przykład
// hash_multimap_lower_bound.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_iterator hm1_AcIter,
hm1_RcIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_RcIter = hm1.lower_bound( 2 );
cout << "The element of hash_multimap hm1 with a key of 2 is: "
<< hm1_RcIter -> second << "." << endl;
hm1_RcIter = hm1.lower_bound( 3 );
cout << "The first element of hash_multimap hm1 with a key of 3 is: "
<< hm1_RcIter -> second << "." << endl;
// If no match is found for the key, end( ) is returned
hm1_RcIter = hm1.lower_bound( 4 );
if ( hm1_RcIter == hm1.end( ) )
cout << "The hash_multimap hm1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of hash_multimap hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
// The element at a specific location in the hash_multimap can be
// found using a dereferenced iterator addressing the location
hm1_AcIter = hm1.end( );
hm1_AcIter--;
hm1_RcIter = hm1.lower_bound( hm1_AcIter -> first );
cout << "The first element of hm1 with a key matching"
<< endl << "that of the last element is: "
<< hm1_RcIter -> second << "." << endl;
// Note that the first element with a key equal to
// the key of the last element is not the last element
if ( hm1_RcIter == --hm1.end( ) )
cout << "This is the last element of hash_multimap hm1."
<< endl;
else
cout << "This is not the last element of hash_multimap hm1."
<< endl;
}
The element of hash_multimap hm1 with a key of 2 is: 20.
The first element of hash_multimap hm1 with a key of 3 is: 20.
The hash_multimap hm1 doesn't have an element with a key of 4.
The first element of hm1 with a key matching
that of the last element is: 20.
This is not the last element of hash_multimap hm1.
hash_multimap::mapped_type
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ reprezentujący typ danych przechowywany w hash_multimap.
typedef Type mapped_type;
Uwagi
mapped_type
jest synonimem typu parametru szablonu.
Aby uzyskać więcej informacji o typie , zobacz temat Klasa hash_multimap.
Przykład
Zobacz przykład value_type, aby zapoznać się z przykładem sposobu deklarowania i używania elementu key_type
.
hash_multimap::max_size
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca maksymalną długość hash_multimap.
size_type max_size() const;
Wartość zwracana
Maksymalna możliwa długość hash_multimap.
Uwagi
Przykład
// hash_multimap_max_size.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: size_type i;
i = hm1.max_size( );
cout << "The maximum possible length "
<< "of the hash_multimap is " << i << "." << endl;
}
hash_multimap::operator=
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zastępuje elementy hash_multimap kopią innego hash_multimap.
hash_multimap& operator=(const hash_multimap& right);
hash_multimap& operator=(hash_multimap&& right);
Parametry
Prawy
Hash_multimap kopiowane do pliku hash_multimap
.
Uwagi
Po wymazaniu wszystkich istniejących elementów w obiekcie hash_multimap
operator=
, kopiuje lub przenosi zawartość bezpośrednio do obiektu hash_multimap
.
Przykład
// hash_multimap_operator_as.cpp
// compile with: /EHsc
#include <hash_multimap>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> v1, v2, v3;
hash_multimap<int, int>::iterator iter;
v1.insert(pair<int, int>(1, 10));
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << iter->second << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = move(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
}
hash_multimap::p inter
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który dostarcza wskaźnik do elementu w hash_multimap.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::pointer pointer;
Uwagi
pointer
Typ może służyć do modyfikowania wartości elementu.
W większości przypadków iterator powinien być używany do uzyskiwania dostępu do elementów w obiekcie hash_multimap.
hash_multimap::rbegin
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator odnoszący się do pierwszego elementu w odwróconej hash_multimap.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Wartość zwracana
Odwrotny iterator dwukierunkowy odnoszący się do pierwszego elementu w odwróconej hash_multimap lub odnoszący się do tego, co było ostatnim elementem w niereversedowanym hash_multimap.
Uwagi
rbegin
jest używany z odwróconym hash_multimap tak samo jak początek jest używany z hash_multimap.
Jeśli wartość zwracana rbegin
elementu jest przypisana do const_reverse_iterator
obiektu , nie można zmodyfikować obiektu hash_multimap. Jeśli wartość zwracana rbegin
elementu jest przypisana do reverse_iterator
obiektu , można zmodyfikować obiekt hash_multimap.
rbegin
może służyć do iterowania przez hash_multimap wstecz.
Przykład
// hash_multimap_rbegin.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: iterator hm1_Iter;
hash_multimap <int, int> :: reverse_iterator hm1_rIter;
hash_multimap <int, int> :: const_reverse_iterator hm1_crIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_rIter = hm1.rbegin( );
cout << "The first element of the reversed hash_multimap hm1 is "
<< hm1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a hash_multimap in a forward order
cout << "The hash_multimap is: ";
for ( hm1_Iter = hm1.begin( ) ; hm1_Iter != hm1.end( ); hm1_Iter++)
cout << hm1_Iter -> first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a hash_multimap in a reverse order
cout << "The reversed hash_multimap is: ";
for ( hm1_rIter = hm1.rbegin( ) ; hm1_rIter != hm1.rend( ); hm1_rIter++)
cout << hm1_rIter -> first << " ";
cout << "." << endl;
// A hash_multimap element can be erased by dereferencing its key
hm1_rIter = hm1.rbegin( );
hm1.erase ( hm1_rIter -> first );
hm1_rIter = hm1.rbegin( );
cout << "After the erasure, the first element\n"
<< "in the reversed hash_multimap is "
<< hm1_rIter -> first << "." << endl;
}
The first element of the reversed hash_multimap hm1 is 3.
The hash_multimap is: 1 2 3 .
The reversed hash_multimap is: 3 2 1 .
After the erasure, the first element
in the reversed hash_multimap is 2.
hash_multimap::reference
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który zawiera odwołanie do elementu przechowywanego w hash_multimap.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::reference reference;
Uwagi
Przykład
// hash_multimap_reference.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
// Declare and initialize a const_reference &Ref1
// to the key of the first element
const int &Ref1 = ( hm1.begin( ) -> first );
// The following line would cause an error as the
// non-const_reference cannot be used to access the key
// int &Ref1 = ( hm1.begin( ) -> first );
cout << "The key of first element in the hash_multimap is "
<< Ref1 << "." << endl;
// Declare and initialize a reference &Ref2
// to the data value of the first element
int &Ref2 = ( hm1.begin( ) -> second );
cout << "The data value of first element in the hash_multimap is "
<< Ref2 << "." << endl;
//The non-const_reference can be used to modify the
//data value of the first element
Ref2 = Ref2 + 5;
cout << "The modified data value of first element is "
<< Ref2 << "." << endl;
}
The key of first element in the hash_multimap is 1.
The data value of first element in the hash_multimap is 10.
The modified data value of first element is 15.
hash_multimap::rend
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator, który odnosi się do lokalizacji, która zakończyła się powodzeniem ostatniego elementu w odwróconej hash_multimap.
const_reverse_iterator rend() const;
reverse_iterator rend();
Wartość zwracana
Odwrotny iterator dwukierunkowy, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconej hash_multimap (lokalizacja, która poprzedzała pierwszy element w niereversedowanym hash_multimap).
Uwagi
rend
jest używany z odwróconym hash_multimap tak samo jak koniec jest używany z hash_multimap.
Jeśli zwracana wartość rend
elementu jest przypisana do const_reverse_iterator, nie można zmodyfikować obiektu hash_multimap. Jeśli zwracana wartość rend
elementu jest przypisana do reverse_iterator, można zmodyfikować obiekt hash_multimap.
rend
można użyć do sprawdzenia, czy iterator odwrotny osiągnął koniec jego hash_multimap.
Wartość zwracana przez rend
nie powinna być wyłuszczone.
Przykład
// hash_multimap_rend.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: iterator hm1_Iter;
hash_multimap <int, int> :: reverse_iterator hm1_rIter;
hash_multimap <int, int> :: const_reverse_iterator hm1_crIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1_rIter = hm1.rend( );
hm1_rIter--;
cout << "The last element of the reversed hash_multimap hm1 is "
<< hm1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a hash_multimap in a forward order
cout << "The hash_multimap is: ";
for ( hm1_Iter = hm1.begin( ) ; hm1_Iter != hm1.end( ); hm1_Iter++)
cout << hm1_Iter -> first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a hash_multimap in a reverse order
cout << "The reversed hash_multimap is: ";
for ( hm1_rIter = hm1.rbegin( ) ; hm1_rIter != hm1.rend( ); hm1_rIter++)
cout << hm1_rIter -> first << " ";
cout << "." << endl;
// A hash_multimap element can be erased by dereferencing its key
hm1_rIter = --hm1.rend( );
hm1.erase ( hm1_rIter -> first );
hm1_rIter = hm1.rend( );
hm1_rIter--;
cout << "After the erasure, the last element "
<< "in the reversed hash_multimap is "
<< hm1_rIter -> first << "." << endl;
}
The last element of the reversed hash_multimap hm1 is 1.
The hash_multimap is: 1 2 3 .
The reversed hash_multimap is: 3 2 1 .
After the erasure, the last element in the reversed hash_multimap is 2.
hash_multimap::reverse_iterator
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ, który udostępnia iterator dwukierunkowy, który może odczytywać lub modyfikować element w odwróconej hash_multimap.
typedef list<typename Traits::value_type, typename Traits::allocator_type>::reverse_iterator reverse_iterator;
Uwagi
Typ reverse_iterator
jest używany do iterowania przez hash_multimap odwrotnie.
Zdefiniowany reverse_iterator
przez hash_multimap wskazuje obiekty value_type, które są typu pair
<const Key, Type.> Wartość klucza jest dostępna za pośrednictwem pierwszej pary składowej, a wartość zamapowanego elementu jest dostępna za pośrednictwem drugiego elementu członkowskiego pary.
Przykład
Zobacz przykład dla narzędzia rbegin , aby zapoznać się z przykładem sposobu deklarowania i używania elementu reverse_iterator
.
hash_multimap::size
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca liczbę elementów w hash_multimap.
size_type size() const;
Wartość zwracana
Bieżąca długość hash_multimap.
Uwagi
Przykład
W poniższym przykładzie pokazano użycie funkcji składowej hash_multimap::size.
// hash_multimap_size.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap<int, int> hm1, hm2;
hash_multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
hm1.insert(Int_Pair(1, 1));
i = hm1.size();
cout << "The hash_multimap length is " << i << "." << endl;
hm1.insert(Int_Pair(2, 4));
i = hm1.size();
cout << "The hash_multimap length is now " << i << "." << endl;
}
The hash_multimap length is 1.
The hash_multimap length is now 2.
hash_multimap::size_type
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Niepodpisany typ liczby całkowitej, który zlicza liczbę elementów w hash_multimap.
typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::size_type size_type;
Uwagi
Przykład
Zobacz przykład rozmiaru, aby zapoznać się z przykładem sposobu deklarowania i używaniasize_type
hash_multimap::swap
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Wymienia elementy dwóch hash_multimaps.
void swap(hash_multimap& right);
Parametry
Prawy
Hash_multimap dostarczające elementy do wymiany lub hash_multimap, których elementy mają być wymieniane z elementami hash_multimap.
Uwagi
Funkcja składowa unieważnia żadne odwołania, wskaźniki lub iteratory, które wyznaczają elementy w dwóch hash_multimaps, których elementy są wymieniane.
Przykład
// hash_multimap_swap.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1, hm2, hm3;
hash_multimap <int, int>::iterator hm1_Iter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm2.insert ( Int_Pair ( 10, 100 ) );
hm2.insert ( Int_Pair ( 20, 200 ) );
hm3.insert ( Int_Pair ( 30, 300 ) );
cout << "The original hash_multimap hm1 is:";
for ( hm1_Iter = hm1.begin( ); hm1_Iter != hm1.end( ); hm1_Iter++ )
cout << " " << hm1_Iter -> second;
cout << "." << endl;
// This is the member function version of swap
hm1.swap( hm2 );
cout << "After swapping with hm2, hash_multimap hm1 is:";
for ( hm1_Iter = hm1.begin( ); hm1_Iter != hm1.end( ); hm1_Iter++ )
cout << " " << hm1_Iter -> second;
cout << "." << endl;
// This is the specialized template version of swap
swap( hm1, hm3 );
cout << "After swapping with hm3, hash_multimap hm1 is:";
for ( hm1_Iter = hm1.begin( ); hm1_Iter != hm1.end( ); hm1_Iter++ )
cout << " " << hm1_Iter -> second;
cout << "." << endl;
}
The original hash_multimap hm1 is: 10 20 30.
After swapping with hm2, hash_multimap hm1 is: 100 200.
After swapping with hm3, hash_multimap hm1 is: 300.
hash_multimap::upper_bound
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Zwraca iterator do pierwszego elementu w hash_multimap z kluczem większym niż określony klucz.
iterator upper_bound(const Key& key);
const_iterator upper_bound(const Key& key) const;
Parametry
key
Klucz argumentu do porównania z kluczem sortowania elementu z przeszukiwanego hash_multimap.
Wartość zwracana
Iterator lub const_iterator adresujący lokalizację elementu w hash_multimap przy użyciu klucza większego niż klucz argumentu lub adresujący lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multimap, jeśli nie znaleziono dopasowania dla klucza.
Jeśli wartość zwracana upper_bound
elementu jest przypisana do const_iterator
obiektu , nie można zmodyfikować obiektu hash_multimap. Jeśli wartość zwracana upper_bound
elementu jest przypisana do iterator
obiektu , można zmodyfikować obiekt hash_multimap.
Uwagi
Przykład
// hash_multimap_upper_bound.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: const_iterator hm1_AcIter, hm1_RcIter;
typedef pair <int, int> Int_Pair;
hm1.insert ( Int_Pair ( 1, 10 ) );
hm1.insert ( Int_Pair ( 2, 20 ) );
hm1.insert ( Int_Pair ( 3, 30 ) );
hm1.insert ( Int_Pair ( 3, 40 ) );
hm1_RcIter = hm1.upper_bound( 1 );
cout << "The 1st element of hash_multimap hm1 with "
<< "a key greater than 1 is: "
<< hm1_RcIter -> second << "." << endl;
hm1_RcIter = hm1.upper_bound( 2 );
cout << "The first element of hash_multimap hm1\n"
<< "with a key greater than 2 is: "
<< hm1_RcIter -> second << "." << endl;
// If no match is found for the key, end( ) is returned
hm1_RcIter = hm1.lower_bound( 4 );
if ( hm1_RcIter == hm1.end( ) )
cout << "The hash_multimap hm1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of hash_multimap hm1 with a key of 4 is: "
<< hm1_RcIter -> second << "." << endl;
// The element at a specific location in the hash_multimap can be
// found using a dereferenced iterator addressing the location
hm1_AcIter = hm1.begin( );
hm1_RcIter = hm1.upper_bound( hm1_AcIter -> first );
cout << "The first element of hm1 with a key greater than"
<< endl << "that of the initial element of hm1 is: "
<< hm1_RcIter -> second << "." << endl;
}
The 1st element of hash_multimap hm1 with a key greater than 1 is: 20.
The first element of hash_multimap hm1
with a key greater than 2 is: 30.
The hash_multimap hm1 doesn't have an element with a key of 4.
The first element of hm1 with a key greater than
that of the initial element of hm1 is: 20.
hash_multimap::value_comp
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Funkcja składowa zwraca obiekt funkcji, który określa kolejność elementów w hash_multimap, porównując ich wartości klucza.
value_compare value_comp() const;
Wartość zwracana
Zwraca obiekt funkcji porównania, którego hash_multimap używa do porządkowania elementów.
Uwagi
W przypadku hash_multimap m, jeśli dwa elementy e1 (k1, d1) i e2(k2, d2) są obiektami typu value_type, gdzie k1 i k2 są kluczami typu key_type i d1 i d2 są ich danymi typu mapped_type, a następnie m.value_comp()(e1, e2)
jest odpowiednikiem .m.key_comp()(k1, k2)
Przechowywany obiekt definiuje funkcję składową
bool operator( value_type& left, value_type& right);
wartość , która zwraca true
wartość klucza poprzedniego left
i nie jest równa wartości right
klucza w kolejności sortowania.
Przykład
// hash_multimap_value_comp.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
hash_multimap <int, int, hash_compare<int, less<int>>> hm1;
hash_multimap <int, int, hash_compare<int, less<int>>
>::value_compare vc1 = hm1.value_comp( );
hash_multimap <int,int>::iterator Iter1, Iter2;
Iter1= hm1.insert ( hash_multimap <int, int> :: value_type ( 1, 10 ) );
Iter2= hm1.insert ( hash_multimap <int, int> :: value_type ( 2, 5 ) );
if( vc1( *Iter1, *Iter2 ) == true )
{
cout << "The element ( 1,10 ) precedes the element ( 2,5 )."
<< endl;
}
else
{
cout << "The element ( 1,10 ) does "
<< "not precede the element ( 2,5 )."
<< endl;
}
if( vc1( *Iter2, *Iter1 ) == true )
{
cout << "The element ( 2,5 ) precedes the element ( 1,10 )."
<< endl;
}
else
{
cout << "The element ( 2,5 ) does "
<< "not precede the element ( 1,10 )."
<< endl;
}
}
hash_multimap::value_type
Uwaga
Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multimap.
Typ reprezentujący typ obiektu przechowywanego w hash_multimap.
typedef pair<const Key, Type> value_type;
Uwagi
value_type
parametr jest zadeklarowany jako para const key_type, mapped_type, a> nie para<key_type, mapped_type>, ponieważ klucze kontenera kojarzącego mogą nie zostać zmienione przy użyciu niekonseksantowanego iteratora lub odwołania. <
Przykład
// hash_multimap_value_type.cpp
// compile with: /EHsc
#include <hash_map>
#include <iostream>
int main( )
{
using namespace std;
using namespace stdext;
typedef pair <const int, int> cInt2Int;
hash_multimap <int, int> hm1;
hash_multimap <int, int> :: key_type key1;
hash_multimap <int, int> :: mapped_type mapped1;
hash_multimap <int, int> :: value_type value1;
hash_multimap <int, int> :: iterator pIter;
// value_type can be used to pass the correct type
// explicitly to avoid implicit type conversion
hm1.insert ( hash_multimap <int, int> :: value_type ( 1, 10 ) );
// Compare another way to insert objects into a hash_multimap
hm1.insert ( cInt2Int ( 2, 20 ) );
// Initializing key1 and mapped1
key1 = ( hm1.begin( ) -> first );
mapped1 = ( hm1.begin( ) -> second );
cout << "The key of first element in the hash_multimap is "
<< key1 << "." << endl;
cout << "The data value of first element in the hash_multimap is "
<< mapped1 << "." << endl;
// The following line would cause an error because
// the value_type is not assignable
// value1 = cInt2Int ( 4, 40 );
cout << "The keys of the mapped elements are:";
for ( pIter = hm1.begin( ) ; pIter != hm1.end( ) ; pIter++ )
cout << " " << pIter -> first;
cout << "." << endl;
cout << "The values of the mapped elements are:";
for ( pIter = hm1.begin( ) ; pIter != hm1.end( ) ; pIter++ )
cout << " " << pIter -> second;
cout << "." << endl;
}
The key of first element in the hash_multimap is 1.
The data value of first element in the hash_multimap is 10.
The keys of the mapped elements are: 1 2.
The values of the mapped elements are: 10 20.
Zobacz też
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++