Udostępnij za pośrednictwem


hash_multiset — Klasa

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Klasa kontenera hash_multiset jest rozszerzeniem standardowej biblioteki C++ i jest używana do przechowywania i szybkiego pobierania danych z kolekcji, w której wartości zawartych elementów służą jako wartości kluczy i nie są wymagane do unikatowości.

Składnia

template <class Key, class Traits =hash_compare<Key, less <Key>>, class Allocator =allocator <Key>>
class hash_multiset

Parametry

Klawisz
Typ danych elementu, który ma być przechowywany w hash_multiset.

Cechy
Typ, który zawiera dwa obiekty funkcji, jeden z porównań klas, który jest predykatem binarnym w stanie porównać dwie wartości elementu jako klucze sortowania w celu określenia ich względnej kolejności i funkcji skrótu, która jest jednoargumentowym mapowaniem kluczowych wartości kluczy 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_multiset i cofnięcia alokacji pamięci. Ten argument jest opcjonalny, a wartość domyślna to allocator<Key>.

Uwagi

Hash_multiset to:

  • Kontenerem asocjacyjnym, który jest kontenerem o zmiennym rozmiarze, obsługującym efektywne pobieranie wartości elementu w oparciu o wartość skojarzonego klucza. Ponadto, jest prostym kontenerem asocjacyjnym, ponieważ jego wartości elementu są jego wartościami 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.

  • Unikatowy w tym sensie, że każdy z jego elementów musi mieć unikatowy klucz. Ponieważ hash_multiset jest również prostym kontenerem asocjacyjnym, jego elementy są również unikatowe.

  • 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 tworzenie skrótów wykonuje 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. Nie można bezpośrednio zmienić wartości elementu w zestawie. Zamiast tego musisz usunąć stare wartości i wstawić elementy z nowymi wartościami.

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_multiset powinien być wybranym kontenerem asocjacyjnym, gdy warunki kojarzenia wartości z kluczami są spełnione przez aplikację. Elementy hash_multiset mogą być wielokrotne i służyć jako własne klucze sortowania, więc klucze nie są unikatowe. Model dla tego typu konstrukcji jest uporządkowaną listą, np. wyrazów, w których wyrazy mogą występować więcej niż jeden raz. Gdyby wiele wystąpień wyrazów nie było dozwolone, wówczas hash_set byłaby odpowiednią strukturą kontenera. Gdyby unikatowe definicje zostały dołączone jako wartości do listy unikatowych słów kluczowych, hash_map byłaby odpowiednią strukturą zawierającą te dane. Jeśli zamiast tego definicje nie były unikatowe, hash_multimap byłby wybranym kontenerem.

Hash_multiset porządkuje sekwencję, którą kontroluje, wywołując przechowywany obiekt cech skrótu 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 Klucz typu wywołanie Trait(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. Skutkuje to ustaleniem kolejności dla elementów nierównoważnych. 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 oraz zwracaną wartość true lub false. Kolejność nałożona na hash_multiset 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ą definiowane jako równoważne, gdy oba obiekty f( x, y) i f( y, x) są fałszywe. 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_multiset jest iteratorem dwukierunkowym, ale funkcje składowe klasy wstawiają i hash_multiset 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_multiset 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_multiset funkcjonalności, ale wystarczy, aby móc mówić znacząco o zakresie iteratorów [ first, last) w kontekście funkcji składowych klasy.

Konstruktory

Konstruktor opis
hash_multiset Tworzy element, który hash_multiset jest pusty lub jest kopią wszystkich lub części innych hash_multisetelementów .

Typedefs

Nazwa typu opis
allocator_type Typ reprezentujący klasę allocator hash_multiset dla obiektu.
const_iterator Typ, który udostępnia iterator dwukierunkowy, który może odczytać const element w obiekcie hash_multiset.
const_pointer Typ, który dostarcza wskaźnik do const elementu w obiekcie hash_multiset.
const_reference Typ, który zawiera odwołanie do elementu przechowywanego const w hash_multiset 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_multiset.
difference_type Typ liczby całkowitej ze znakiem, który zapewnia różnicę między dwoma iteratorami, które adresuje elementy w ramach tego samego hash_multisetelementu .
Sterująca Typ, który udostępnia iterator dwukierunkowy, który może odczytywać lub modyfikować dowolny element w obiekcie hash_multiset.
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_multiset.
key_type Typ, który opisuje obiekt przechowywany jako element hash_set w jego pojemności jako klucz sortowania.
wskaźnik Typ, który dostarcza wskaźnik do elementu w elemecie hash_multiset.
odniesienie Typ, który zawiera odwołanie do elementu przechowywanego w obiekcie hash_multiset.
reverse_iterator Typ, który udostępnia iterator dwukierunkowy, który może odczytywać lub modyfikować element w odwróconym hash_multisetobiekcie .
size_type Niepodpisany typ liczb całkowitych, który może reprezentować liczbę elementów w obiekcie hash_multiset.
value_compare Typ, który udostępnia dwa obiekty funkcji, binarny predykat klasy porównywania, który może porównać dwie wartości elementów elementu w hash_multiset celu określenia ich względnej kolejności i jednoargumentowego predykatu, który skróty elementów.
value_type Typ, który opisuje obiekt przechowywany jako element hash_multiset w jego pojemności jako wartość.

Funkcje składowe

Funkcja składowa opis
zaczynać Zwraca iterator, który adresuje pierwszy element w obiekcie hash_multiset.
cbegin Zwraca iterator const odnoszący się do pierwszego elementu w obiekcie hash_multiset.
cend Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w elemecie hash_multiset.
jasny Usuwa wszystkie elementy elementu hash_multiset.
count Zwraca liczbę elementów w kluczu hash_multiset , których klucz pasuje do klucza określonego przez parametr
crbegin Zwraca iterator const odnoszący się do pierwszego elementu w odwróconym hash_multisetobiekcie .
crend Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconym elemecie hash_multiset.
miejsce Wstawia element skonstruowany w miejscu do elementu hash_multiset.
emplace_hint Wstawia element skonstruowany w miejscu do hash_multisetelementu z wskazówką umieszczania.
empty Sprawdza, czy element hash_multiset jest pusty.
koniec Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w elemecie hash_multiset.
equal_range Zwraca parę iteratorów odpowiednio do pierwszego elementu w hash_multiset obiekcie z kluczem większym niż określony klucz i do pierwszego elementu w hash_multiset obiekcie z kluczem równym lub większym niż klucz.
wymazać Usuwa element lub zakres elementów z hash_multiset określonych pozycji lub usuwa elementy zgodne z określonym kluczem.
find Zwraca iterator odnoszący się do lokalizacji elementu w obiekcie hash_multiset , który ma klucz odpowiadający określonemu kluczowi.
get_allocator Zwraca kopię obiektu używanego allocator do konstruowania obiektu hash_multiset.
wstawiać Wstawia element lub zakres elementów do elementu hash_multiset.
key_comp Pobiera kopię obiektu porównania używanego do zamawiania kluczy w obiekcie hash_multiset.
lower_bound Zwraca iterator do pierwszego elementu w obiekcie hash_multiset z kluczem równym lub większym niż określony klucz.
max_size Zwraca maksymalną długość obiektu hash_multiset.
rbegin Zwraca iterator odnoszący się do pierwszego elementu w odwróconym hash_multisetobiekcie .
drzeć Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconym elemecie hash_multiset.
rozmiar Zwraca liczbę elementów w elem.hash_multiset
zamiana Wymienia elementy dwóch hash_multisets.
upper_bound Zwraca iterator do pierwszego elementu w obiekcie hash_multiset z kluczem równym lub większym niż określony klucz.
value_comp Pobiera kopię obiektu cech skrótu używanego do określania wartości klucza elementu skrótu i porządkowanie ich w obiekcie hash_multiset.

Operatory

Operator opis
hash_multiset::operator= Zastępuje elementy hash_multiset kopią innego hash_multiset.

Wymagania

Nagłówek:<hash_set>

Przestrzeń nazw: stdext

hash_multiset::allocator_type

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ reprezentujący klasę alokatora dla obiektu hash_multiset.

typedef list<typename Traits::value_type, typename Traits::allocator_type>::allocator_type allocator_type;

Przykład

Zobacz przykład get_allocator, aby zapoznać się z przykładem użyciaallocator_type

hash_multiset::begin

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator, który adresuje pierwszy element w hash_multiset.

const_iterator begin() const;

iterator begin();

Wartość zwracana

Iterator dwukierunkowy odnoszący się do pierwszego elementu w hash_multiset lub lokalizacji, która zakończyła się powodzeniem pustej hash_multiset.

Uwagi

Jeśli zwracana wartość begin elementu jest przypisana do const_iteratorobiektu , nie można modyfikować elementów w obiekcie hash_multiset. Jeśli wartość zwracana begin elementu jest przypisana do iteratorobiektu , elementy w obiekcie hash_multiset można modyfikować.

Przykład

// hash_multiset_begin.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int>::iterator hms1_Iter;
   hash_multiset <int>::const_iterator hms1_cIter;

   hms1.insert( 1 );
   hms1.insert( 2 );
   hms1.insert( 3 );

   hms1_Iter = hms1.begin( );
   cout << "The first element of hms1 is " << *hms1_Iter << endl;

   hms1_Iter = hms1.begin( );
   hms1.erase( hms1_Iter );

   // The following 2 lines would err because the iterator is const
   // hms1_cIter = hms1.begin( );
   // hms1.erase( hms1_cIter );

   hms1_cIter = hms1.begin( );
   cout << "The first element of hms1 is now " << *hms1_cIter << endl;
}
The first element of hms1 is 1
The first element of hms1 is now 2

hash_multiset::cbegin

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator const, który adresuje pierwszy element w hash_multiset.

const_iterator cbegin() const;

Wartość zwracana

Iterator dwukierunkowy odnoszący się do pierwszego elementu w hash_multiset lub lokalizacji, która zakończyła się powodzeniem pustego hash_multisetelementu .

Uwagi

Przy zwracanej wartości cbeginelementu nie można modyfikować elementów w hash_multiset obiekcie.

Przykład

// hash_multiset_cbegin.cpp
// compile with: /EHsc
#include <hash_multiset>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hs1;
   hash_multiset <int>::const_iterator hs1_cIter;

   hs1.insert( 1 );
   hs1.insert( 2 );
   hs1.insert( 3 );

   hs1_cIter = hs1.cbegin( );
   cout << "The first element of hs1 is " << *hs1_cIter << endl;
}
The first element of hs1 is 1

hash_multiset::cend

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multiset.

const_iterator cend() const;

Wartość zwracana

Iterator dwukierunkowy, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multiset. Jeśli wartość jest pusta hash_multiset , to hash_multiset::cend == hash_multiset::begin.

Uwagi

cend służy do testowania, czy iterator osiągnął koniec jego hash_multiset. Wartość zwracana przez cend nie powinna być wyłuszczone.

Przykład

// hash_multiset_cend.cpp
// compile with: /EHsc
#include <hash_multiset>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hs1;
   hash_multiset <int> :: const_iterator hs1_cIter;

   hs1.insert( 1 );
   hs1.insert( 2 );
   hs1.insert( 3 );

   hs1_cIter = hs1.cend( );
   hs1_cIter--;
   cout << "The last element of hs1 is " << *hs1_cIter << endl;
}
The last element of hs1 is 3

hash_multiset::clear

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Usuwa wszystkie elementy hash_multiset.

void clear();

Uwagi

Przykład

// hash_multiset_clear.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;

   hms1.insert( 1 );
   hms1.insert( 2 );

   cout << "The size of the hash_multiset is initially " << hms1.size( )
        << "." << endl;

   hms1.clear( );
   cout << "The size of the hash_multiset after clearing is "
        << hms1.size( ) << "." << endl;
}
The size of the hash_multiset is initially 2.
The size of the hash_multiset after clearing is 0.

hash_multiset::const_iterator

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który udostępnia iterator dwukierunkowy, który może odczytać const element w hash_multiset.

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.

Przykład

Zobacz przykład, aby zapoznać się z przykładem przy użyciu polecenia const_iterator.

hash_multiset::const_pointer

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który dostarcza wskaźnik do const elementu w hash_multiset.

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 const_iterator należy użyć do uzyskiwania dostępu do elementów w const obiekcie hash_multiset.

hash_multiset::const_reference

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który zawiera odwołanie do elementu przechowywanego const w hash_multiset do odczytywania i wykonywania const operacji.

typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::const_reference const_reference;

Uwagi

Przykład

// hash_multiset_const_reference.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;

   hms1.insert( 10 );
   hms1.insert( 20 );

   // Declare and initialize a const_reference &Ref1
   // to the 1st element
   const int &Ref1 = *hms1.begin( );

   cout << "The first element in the hash_multiset is "
        << Ref1 << "." << endl;

   // The following line would cause an error because the
   // const_reference cannot be used to modify the hash_multiset
   // Ref1 = Ref1 + 5;
}
The first element in the hash_multiset is 10.

hash_multiset::const_reverse_iterator

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który udostępnia iterator dwukierunkowy, który może odczytywać dowolny const element w hash_multiset.

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_multiset odwrotnie.

Przykład

Zobacz przykład nazwy rend, aby zapoznać się z przykładem sposobu deklarowania i używania elementu const_reverse_iterator.

hash_multiset::count

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca liczbę elementów w hash_multiset, 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_multiset.

Wartość zwracana

Liczba elementów w hash_multiset z określonym parametrem klucza.

Uwagi

Funkcja składowa zwraca liczbę elementów w następującym zakresie:

[ lower_bound(klucz), upper_bound(klucz) ).

Przykład

W poniższym przykładzie pokazano użycie funkcji składowej hash_multiset::count.

// hash_multiset_count.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
    using namespace std;
    using namespace stdext;
    hash_multiset<int> hms1;
    hash_multiset<int>::size_type i;

    hms1.insert(1);
    hms1.insert(1);

    // Keys do not need to be unique in hash_multiset,
    // so duplicates may exist.
    i = hms1.count(1);
    cout << "The number of elements in hms1 with a sort key of 1 is: "
         << i << "." << endl;

    i = hms1.count(2);
    cout << "The number of elements in hms1 with a sort key of 2 is: "
         << i << "." << endl;
}
The number of elements in hms1 with a sort key of 1 is: 2.
The number of elements in hms1 with a sort key of 2 is: 0.

hash_multiset::crbegin

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator const odnoszący się do pierwszego elementu w odwróconej hash_multiset.

const_reverse_iterator crbegin() const;

Wartość zwracana

Odwrotny iterator dwukierunkowy odnoszący się do pierwszego elementu w odwróconej hash_multiset lub zwracając się do tego, co było ostatnim elementem w niewróceniu hash_multiset.

Uwagi

crbegin jest używany z odwróconym elementem hash_multiset tak samo jak hash_multiset::begin jest używany z elementem hash_multiset.

Przy użyciu wartości zwracanej crbeginhash_multiset obiektu nie można modyfikować.

crbegin może służyć do iterowania przez hash_multiset tyły.

Przykład

// hash_multiset_crbegin.cpp
// compile with: /EHsc
#include <hash_multiset>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hs1;
   hash_multiset <int>::const_reverse_iterator hs1_crIter;

   hs1.insert( 10 );
   hs1.insert( 20 );
   hs1.insert( 30 );

   hs1_crIter = hs1.crbegin( );
   cout << "The first element in the reversed hash_multiset is "
        << *hs1_crIter << "." << endl;
}
The first element in the reversed hash_multiset is 30.

hash_multiset::crend

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator const, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconej hash_multiset.

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_multiset (lokalizacja, która poprzedzała pierwszy element w niewzróconym hash_multisetelemeducie ).

Uwagi

crend jest używany z odwróconym elementem hash_multiset tak samo jak hash_multiset::end jest używany z elementem hash_multiset.

Przy użyciu wartości zwracanej crendhash_multiset obiektu nie można modyfikować.

crend umożliwia sprawdzenie, czy iterator odwrotny osiągnął koniec hash_multiset.

Przykład

// hash_multiset_crend.cpp
// compile with: /EHsc
#include <hash_multiset>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hs1;
   hash_multiset <int>::const_reverse_iterator hs1_crIter;

   hs1.insert( 10 );
   hs1.insert( 20 );
   hs1.insert( 30 );

   hs1_crIter = hs1.crend( );
   hs1_crIter--;
   cout << "The last element in the reversed hash_multiset is "
        << *hs1_crIter << "." << endl;
}
The last element in the reversed hash_multiset is 10.

hash_multiset::d ifference_type

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ liczby całkowitej ze znakiem, który zapewnia różnicę między dwoma iteratorami, które adresuje elementy w ramach tej samej hash_multiset.

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 [ first, last) między iteratorami first i last, zawiera element wskazywany przez first i zakres elementów do, ale nie uwzględnia, element wskazywany 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 lub deque.

Przykład

// hash_multiset_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <hash_set>
#include <algorithm>

int main( )
{
   using namespace std;
   using namespace stdext;

   hash_multiset <int> hms1;
   hash_multiset <int>::iterator hms1_Iter, hms1_bIter, hms1_eIter;

   hms1.insert( 20 );
   hms1.insert( 10 );

   // hash_multiset elements need not be unique
   hms1.insert( 20 );

   hms1_bIter = hms1.begin( );
   hms1_eIter = hms1.end( );

   hash_multiset <int>::difference_type   df_typ5, df_typ10,
        df_typ20;

   df_typ5 = count( hms1_bIter, hms1_eIter, 5 );
   df_typ10 = count( hms1_bIter, hms1_eIter, 10 );
   df_typ20 = count( hms1_bIter, hms1_eIter, 20 );

   // The keys & hence the elements of a hash_multiset
   // need not be unique and may occur multiple times
   cout << "The number '5' occurs " << df_typ5
        << " times in hash_multiset hms1.\n";
   cout << "The number '10' occurs " << df_typ10
        << " times in hash_multiset hms1.\n";
   cout << "The number '20' occurs " << df_typ20
        << " times in hash_multiset hms1.\n";

   // Count the number of elements in a hash_multiset
   hash_multiset <int>::difference_type  df_count = 0;
   hms1_Iter = hms1.begin( );
   while ( hms1_Iter != hms1_eIter)
   {
      df_count++;
      hms1_Iter++;
   }

   cout << "The number of elements in the hash_multiset hms1 is "
        << df_count << "." << endl;
}
The number '5' occurs 0 times in hash_multiset hms1.
The number '10' occurs 1 times in hash_multiset hms1.
The number '20' occurs 2 times in hash_multiset hms1.
The number of elements in the hash_multiset hms1 is 3.

hash_multiset::emplace

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Wstawia element skonstruowany w miejscu do hash_multiset.

template <class ValTy>
iterator insert(ValTy&& val);

Parametry

Val
Wartość elementu, który ma zostać wstawiony do hash_multiset , chyba że hash_multiset element zawiera już ten element lub, ogólniej, element, którego klucz jest równoważnie uporządkowany.

Wartość zwracana

Funkcja emplace składowa zwraca iterator wskazujący położenie, w którym wstawiono nowy element.

Uwagi

Przykład

// hash_multiset_emplace.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>
#include <string>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset<string> hms3;
   string str1("a");

   hms3.emplace(move(str1));
   cout << "After the emplace insertion, hms3 contains "
      << *hms3.begin() << "." << endl;
}
After the emplace insertion, hms3 contains a.

hash_multiset::emplace_hint

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Wstawia element skonstruowany na miejscu do hash_multiset z wskazówką umieszczania.

template <class ValTy>
iterator insert(
    const_iterator where,
    ValTy&& val);

Parametry

Val
Wartość elementu, który ma zostać wstawiony do hash_multiset , chyba że hash_multiset element zawiera już ten element lub, ogólniej, element, którego klucz jest równoważnie uporządkowany.

gdzie
Miejsce, w którym należy rozpocząć wyszukiwanie poprawnego punktu wstawiania. (Wstawienie może wystąpić w amortyzowanym stałym czasie, a nie w czasie logarytmicznych, jeśli punkt wstawiania następuje natychmiast po miejscu).

Wartość zwracana

Funkcja składowa hash_multiset::emplace zwraca iterator wskazujący położenie, w którym nowy element został wstawiony do hash_multisetelementu .

Uwagi

Wstawienie może wystąpić w amortyzowanym stałym czasie, a nie w czasie logarytmicznych, jeśli punkt wstawiania natychmiast następuje po miejscu.

Przykład

// hash_multiset_emplace_hint.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>
#include <string>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset<string> hms1;
   string str1("a");

   hms1.insert(hms1.begin(), move(str1));
   cout << "After the emplace insertion, hms1 contains "
      << *hms1.begin() << "." << endl;
}
After the emplace insertion, hms1 contains a.

hash_multiset::empty

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Sprawdza, czy hash_multiset jest pusta.

bool empty() const;

Wartość zwracana

true jeśli hash_multiset jest pusta; false jeśli hash_multiset jest brak.

Uwagi

Przykład

// hash_multiset_empty.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1, hms2;
   hms1.insert ( 1 );

   if ( hms1.empty( ) )
      cout << "The hash_multiset hms1 is empty." << endl;
   else
      cout << "The hash_multiset hms1 is not empty." << endl;

   if ( hms2.empty( ) )
      cout << "The hash_multiset hms2 is empty." << endl;
   else
      cout << "The hash_multiset hms2 is not empty." << endl;
}
The hash_multiset hms1 is not empty.
The hash_multiset hms2 is empty.

hash_multiset::end

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multiset.

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_multiset. Jeśli hash_multiset jest pusta, hash_multiset::end == hash_multiset::begin.

Uwagi

end służy do testowania, czy iterator osiągnął koniec hash_multiset. Wartość zwracana przez end nie powinna być wyłuszczone.

Przykład

// hash_multiset_end.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int> :: iterator hms1_Iter;
   hash_multiset <int> :: const_iterator hms1_cIter;

   hms1.insert( 1 );
   hms1.insert( 2 );
   hms1.insert( 3 );

   hms1_Iter = hms1.end( );
   hms1_Iter--;
   cout << "The last element of hms1 is " << *hms1_Iter << endl;

   hms1.erase( hms1_Iter );

   // The following 3 lines would err because the iterator is const
   // hms1_cIter = hms1.end( );
   // hms1_cIter--;
   // hms1.erase( hms1_cIter );

   hms1_cIter = hms1.end( );
   hms1_cIter--;
   cout << "The last element of hms1 is now " << *hms1_cIter << endl;
}
The last element of hms1 is 3
The last element of hms1 is now 2

hash_multiset::equal_range

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca parę iteratorów odpowiednio do pierwszego elementu w hash_multiset z kluczem większym niż określony klucz i do pierwszego elementu w hash_multiset 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_multiset.

Wartość zwracana

Para iteratorów, gdzie pierwszy to lower_bound klucza, a drugi to 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).

Przykład

// hash_multiset_equal_range.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   typedef hash_multiset<int> IntHSet;
   IntHSet hms1;
   hash_multiset <int> :: const_iterator hms1_RcIter;

   hms1.insert( 10 );
   hms1.insert( 20 );
   hms1.insert( 30 );

   pair <IntHSet::const_iterator, IntHSet::const_iterator> p1, p2;
   p1 = hms1.equal_range( 20 );

   cout << "The upper bound of the element with "
        << "a key of 20\nin the hash_multiset hms1 is: "
        << *(p1.second) << "." << endl;

   cout << "The lower bound of the element with "
        << "a key of 20\nin the hash_multiset hms1 is: "
        << *(p1.first) << "." << endl;

   // Compare the upper_bound called directly
   hms1_RcIter = hms1.upper_bound( 20 );
   cout << "A direct call of upper_bound( 20 ) gives "
        << *hms1_RcIter << "," << endl
        << "matching the 2nd element of the pair"
        << " returned by equal_range( 20 )." << endl;

   p2 = hms1.equal_range( 40 );

   // If no match is found for the key,
   // both elements of the pair return end( )
   if ( ( p2.first == hms1.end( ) )
      && ( p2.second == hms1.end( ) ) )
      cout << "The hash_multiset hms1 doesn't have an element "
           << "with a key less than 40." << endl;
   else
      cout << "The element of hash_multiset hms1"
           << "with a key >= 40 is: "
           << *(p1.first) << "." << endl;
}
The upper bound of the element with a key of 20
in the hash_multiset hms1 is: 30.
The lower bound of the element with a key of 20
in the hash_multiset hms1 is: 20.
A direct call of upper_bound( 20 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 20 ).
The hash_multiset hms1 doesn't have an element with a key less than 40.

hash_multiset::erase

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Usuwa element lub zakres elementów w hash_multiset 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_multiset.

pierwszy
Pozycja pierwszego elementu usuniętego z hash_multiset.

ostatni
Pozycja tuż poza ostatnim elementem usuniętym z hash_multiset.

key
Klucz elementów do usunięcia z hash_multiset.

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_multiset, jeśli taki element nie istnieje. W przypadku trzeciej funkcji składowej liczba elementów, które zostały usunięte z hash_multiset.

Uwagi

Funkcje składowe nigdy nie zgłaszają wyjątku.

Przykład

W poniższym przykładzie pokazano użycie funkcji składowej hash_multiset::erase.

// hash_multiset_erase.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main()
{
    using namespace std;
    using namespace stdext;
    hash_multiset<int> hms1, hms2, hms3;
    hash_multiset<int> :: iterator pIter, Iter1, Iter2;
    int i;
    hash_multiset<int>::size_type n;

    for (i = 1; i < 5; i++)
    {
        hms1.insert(i);
        hms2.insert(i * i);
        hms3.insert(i - 1);
    }

    // The 1st member function removes an element at a given position
    Iter1 = ++hms1.begin();
    hms1.erase(Iter1);

    cout << "After the 2nd element is deleted,\n"
         << "the hash_multiset hms1 is:" ;
    for (pIter = hms1.begin(); pIter != hms1.end(); pIter++)
        cout << " " << *pIter;
    cout << "." << endl;

    // The 2nd member function removes elements
    // in the range [ first,  last)
    Iter1 = ++hms2.begin();
    Iter2 = --hms2.end();
    hms2.erase(Iter1, Iter2);

    cout << "After the middle two elements are deleted,\n"
         << "the hash_multiset hms2 is:" ;
    for (pIter = hms2.begin(); pIter != hms2.end(); pIter++)
        cout << " " << *pIter;
    cout << "." << endl;

    // The 3rd member function removes elements with a given  key
    n = hms3.erase(2);

    cout << "After the element with a key of 2 is deleted,\n"
         << "the hash_multiset hms3 is:" ;
    for (pIter = hms3.begin(); pIter != hms3.end(); pIter++)
        cout << " " << *pIter;
    cout << "." << endl;

    // The 3rd member function returns the number of elements removed
    cout << "The number of elements removed from hms3 is: "
         << n << "." << endl;

    // The dereferenced iterator can also be used to specify a key
    Iter1 = ++hms3.begin();
    hms3.erase(Iter1);

    cout << "After another element with a key "
         << "equal to that of the 2nd element\n"
         << "is deleted, the hash_multiset hms3 is:" ;
    for (pIter = hms3.begin(); pIter != hms3.end(); pIter++)
        cout << " " << *pIter;
    cout << "." << endl;
}
After the 2nd element is deleted,
the hash_multiset hms1 is: 1 3 4.
After the middle two elements are deleted,
the hash_multiset hms2 is: 16 4.
After the element with a key of 2 is deleted,
the hash_multiset hms3 is: 0 1 3.
The number of elements removed from hms3 is: 1.
After another element with a key equal to that of the 2nd element
is deleted, the hash_multiset hms3 is: 0 3.

hash_multiset::find

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator odnoszący się do lokalizacji elementu w hash_multiset, który ma klucz odpowiadający określonemu kluczowi.

iterator find(const Key& key);

const_iterator find(const Key& key) const;

Parametry

key
Klucz argumentu, który ma być dopasowany przez klucz sortowania elementu z przeszukiwanego hash_multiset.

Wartość zwracana

Iterator lub const_iterator adresujący lokalizację elementu równoważnego określonemu kluczowi lub adresujący lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multiset, jeśli nie zostanie znalezione dopasowanie klucza.

Uwagi

Funkcja składowa zwraca iterator, który adresuje element w hash_multiset, 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 zwracana wartość find elementu jest przypisana do const_iteratorobiektu , nie można zmodyfikować obiektu hash_multiset. Jeśli wartość zwracana find elementu jest przypisana do iteratorobiektu , można zmodyfikować obiekt hash_multiset.

Przykład

// hash_multiset_find.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int> :: const_iterator hms1_AcIter, hms1_RcIter;

   hms1.insert( 10 );
   hms1.insert( 20 );
   hms1.insert( 30 );

   hms1_RcIter = hms1.find( 20 );
   cout << "The element of hash_multiset hms1 with a key of 20 is: "
        << *hms1_RcIter << "." << endl;

   hms1_RcIter = hms1.find( 40 );

   // If no match is found for the key, end( ) is returned
   if ( hms1_RcIter == hms1.end( ) )
      cout << "The hash_multiset hms1 doesn't have an element "
           << "with a key of 40." << endl;
   else
      cout << "The element of hash_multiset hms1 with a key of 40 is: "
           << *hms1_RcIter << "." << endl;

   // The element at a specific location in the hash_multiset can be found
   // by using a dereferenced iterator addressing the location
   hms1_AcIter = hms1.end( );
   hms1_AcIter--;
   hms1_RcIter = hms1.find( *hms1_AcIter );
   cout << "The element of hms1 with a key matching "
        << "that of the last element is: "
        << *hms1_RcIter << "." << endl;
}
The element of hash_multiset hms1 with a key of 20 is: 20.
The hash_multiset hms1 doesn't have an element with a key of 40.
The element of hms1 with a key matching that of the last element is: 30.

hash_multiset::get_allocator

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca kopię obiektu alokatora używanego do konstruowania hash_multiset.

Allocator get_allocator() const;

Wartość zwracana

Alokator używany przez hash_multiset do zarządzania pamięcią, czyli parametrem Allocatorszablonu klasy .

Aby uzyskać więcej informacji na temat Allocatorprogramu , zobacz sekcję Uwagi w temacie hash_multiset Class (Klasa hash_multiset).

Uwagi

Alokatory dla klasy hash_multiset 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_multiset_get_allocator.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;

   // The following lines declare objects
   // that use the default allocator.
   hash_multiset <int, hash_compare <int, less<int> > > hms1;
   hash_multiset <int, hash_compare <int, greater<int> > > hms2;
   hash_multiset <double, hash_compare <double,
      less<double> >, allocator<double> > hms3;

   hash_multiset <int, hash_compare <int,
      greater<int> > >::allocator_type hms2_Alloc;
   hash_multiset <double>::allocator_type hms3_Alloc;
   hms2_Alloc = hms2.get_allocator( );

   cout << "The number of integers that can be allocated"
        << endl << "before free memory is exhausted: "
        << hms1.max_size( ) << "." << endl;

   cout << "The number of doubles that can be allocated"
        << endl << "before free memory is exhausted: "
        << hms3.max_size( ) <<  "." << endl;

   // The following lines create a hash_multiset hms4
   // with the allocator of hash_multiset hms1.
   hash_multiset <int>::allocator_type hms4_Alloc;
   hash_multiset <int> hms4;
   hms4_Alloc = hms2.get_allocator( );

   // Two allocators are interchangeable if
   // storage allocated from each can be
   // deallocated by the other
   if( hms2_Alloc == hms4_Alloc )
   {
      cout << "The allocators are interchangeable."
           << endl;
   }
   else
   {
      cout << "The allocators are not interchangeable."
           << endl;
   }
}

hash_multiset::hash_multiset

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Tworzy element, który hash_multiset jest pusty lub jest kopią wszystkich lub części innych hash_multisetelementów .

hash_multiset();

explicit hash_multiset(
    const Traits& Comp);

hash_multiset(
    const Traits& Comp,
    const Allocator& Al);

hash_multiset(
    const hash_multiset<Key, Traits, Allocator>& Right);

hash_multiset(
    hash_multiset&& Right
};
hash_multiset (initializer_list<Type> IList);

hash_multiset(
    initializer_list<Tu[e> IList, const Compare& Comp):
hash_multiset(
    initializer_list<Type> IList, const Compare& Comp, const Allocator& Al);

template <class InputIterator>
hash_multiset(
    InputIterator first,
    InputIterator last);

template <class InputIterator>
hash_multiset(
    InputIterator first,
    InputIterator last,
    const Traits& Comp);

template <class InputIterator>
hash_multiset(
    InputIterator first,
    InputIterator last,
    const Traits& Comp,
    const Allocator& Al);

Parametry

Al
Klasa alokatora magazynu, która ma być używana dla tego hash_multiset obiektu, który domyślnie ma wartość Allocator.

Komp
Funkcja porównania typu const Traits używana do porządkowenia elementów w hash_multisetobiekcie , która jest domyślnie ustawiona na hash_compare.

Right
Element hash_multiset , którego konstrukcja hash_multiset 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, który zawiera elementy do skopiowania.

Uwagi

Wszystkie konstruktory przechowują typ obiektu alokatora, który zarządza magazynem pamięci dla hash_multiset obiektu i które można później zwrócić przez wywołanie hash_multiset::get_allocator. Parametr alokatora jest często pomijany w deklaracjach klas i makrach przetwarzania wstępnego używanych do zastępowania alternatywnych alokatorów.

Wszystkie konstruktory inicjują swoje hash_multisets.

Wszystkie konstruktory przechowują obiekt funkcji typu Traits , który jest używany do ustanowienia kolejności między kluczami elementu hash_multiset i które można później zwrócić przez wywołanie hash_multiset::key_comp. Aby uzyskać więcej informacji, Traits zobacz temat Klasa hash_multiset.

Pierwsze trzy konstruktory określają pusty początkowy , hash_multisetdrugi określający typ funkcji porównania (Comp) do użycia w ustaleniu kolejności elementów, a trzeci jawnie określając typ alokatora (Al) do użycia. Słowo kluczowe explicit pomija niektóre rodzaje automatycznej konwersji typów.

Czwarty konstruktor przenosi element hash_multiset Right.

Piąte, szóste i siódme konstruktory używają initializer_list.

Ostatnie trzy konstruktory kopiują zakres [ first, last) hash_multiset obiektu z rosnącą jawnością określającą typ funkcji porównania klasy Compare i alokator.

Rzeczywista kolejność elementów w kontenerze zestawu skrótów zależy od funkcji wyznaczania wartości skrótu, funkcji porządkowania i bieżącego rozmiaru tabeli skrótów, a ogólnie nie można przewidzieć, jak to możliwe w przypadku kontenera zestawu, gdzie został on określony przez funkcję porządkowania.

hash_multiset::insert

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Wstawia element lub zakres elementów do hash_multiset.

iterator insert(
    const Type& value);

iterator insert(
    iterator where,
    const Type& Al);

void insert(
    initializer_list<Type> IList);

iterator insert(
    const Type& value);

iterator insert(
    Iterator where,
    const Type& value);

template <class InputIterator>
void insert(
    InputIterator first,
    InputIterator last);

template <class ValTy>
iterator insert(
    ValTy&& value);

template <class ValTy>
iterator insert(
    const_iterator where,
    ValTy&& value);

Parametry

wartość
Wartość elementu, który ma zostać wstawiony do hash_multiset, chyba że hash_multiset zawiera już ten element lub, ogólniej, element, którego klucz jest równoważnie uporządkowany.

gdzie
Miejsce, w którym należy rozpocząć wyszukiwanie poprawnego punktu wstawiania. (Wstawienie może wystąpić w amortyzowanym stałym czasie, a nie w czasie logarytmicznych, jeśli punkt wstawiania następuje natychmiast po miejscu).

pierwszy
Pozycja pierwszego elementu do skopiowania z hash_multiset.

ostatni
Pozycja tuż poza ostatnim elementem, który ma zostać skopiowany z hash_multiset.

IList
Initializer_list zawierający elementy do skopiowania.

Wartość zwracana

Pierwsze dwie funkcje składowe wstawiania zwracają iterator wskazujący położenie, w którym wstawiono nowy element.

Następne trzy funkcje członkowskie używają initializer_list.

Trzecia funkcja składowa wstawia sekwencję wartości elementów do hash_multiset odpowiadającym każdemu elementowi adresowanemu przez iterator w zakresie [ first, last) określonego hash_multiset.

Uwagi

Wstawienie może wystąpić w amortyzowanym stałym czasie dla wersji wstawiania wskazówek, zamiast czasu logarytmicznych, jeśli punkt wstawiania natychmiast następuje po miejscu.

hash_multiset::iterator

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który udostępnia iterator dwukierunkowy, który może odczytywać lub modyfikować dowolny element w hash_multiset.

typedef list<typename Traits::value_type, typename Traits::allocator_type>::iterator iterator;

Uwagi

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_multiset::key_comp

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Pobiera kopię obiektu porównania używanego do zamawiania kluczy w hash_multiset.

key_compare key_comp() const;

Wartość zwracana

Zwraca hash_multiset parametr szablonu Traits, który zawiera obiekty funkcji używane do wyznaczania wartości skrótu i porządkować elementy kontenera.

Aby uzyskać więcej informacji na temat cech , zobacz temat Klasa hash_multiset.

Uwagi

Przechowywany obiekt definiuje funkcję składową:

bool operator<(const Key& _xVal, const Key& _yVal);

wartość , która zwraca wartość true , jeśli _xVal jest poprzednia i nie jest równa _yVal w kolejności sortowania.

Należy pamiętać, że zarówno key_compare, jak i value_compare są synonimami cech parametru szablonu. Oba typy są udostępniane dla klas hash_multiset i hash_multiset, w których są identyczne, w celu zachowania zgodności z klasami hash_map i hash_multimap, gdzie są one odrębne.

Przykład

// hash_multiset_key_comp.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;

   hash_multiset <int, hash_compare < int, less<int> > >hms1;
   hash_multiset<int, hash_compare < int, less<int> > >::key_compare kc1
          = hms1.key_comp( ) ;
   bool result1 = kc1( 2, 3 ) ;
   if( result1 == true )
   {
      cout << "kc1( 2,3 ) returns value of true, "
           << "where kc1 is the function object of hms1."
           << endl;
   }
   else
   {
      cout << "kc1( 2,3 ) returns value of false "
           << "where kc1 is the function object of hms1."
        << endl;
   }

   hash_multiset <int, hash_compare < int, greater<int> > > hms2;
   hash_multiset<int, hash_compare < int, greater<int> > >::key_compare
         kc2 = hms2.key_comp( ) ;
   bool result2 = kc2( 2, 3 ) ;
   if( result2 == true )
   {
      cout << "kc2( 2,3 ) returns value of true, "
           << "where kc2 is the function object of hms2."
           << endl;
   }
   else
   {
      cout << "kc2( 2,3 ) returns value of false, "
           << "where kc2 is the function object of hms2."
           << endl;
   }
}

hash_multiset::key_compare

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który udostępnia dwa obiekty funkcji, binarny predykat klasy porównywania, który może porównać dwie wartości elementów hash_multiset w celu określenia ich względnej kolejności i jednoargumentowego predykatu, który skróty elementów.

typedef Traits key_compare;

Uwagi

key_comparejest synonimem cech parametru szablonu.

Aby uzyskać więcej informacji na temat cech , zobacz temat Klasa hash_multiset.

Należy pamiętać, że zarównokey_compare, jak i value_compare są synonimami cech parametru szablonu. Oba typy są udostępniane dla klas hash_set i hash_multiset, w których są identyczne, w celu zachowania zgodności z klasami hash_map i hash_multimap, gdzie są one odrębne.

Przykład

Zobacz przykład key_comp, aby zapoznać się z przykładem sposobu deklarowania i używania elementu key_compare.

hash_multiset::key_type

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który udostępnia obiekt funkcji, który może porównać klucze sortowania w celu określenia względnej kolejności dwóch elementów w hash_multiset.

typedef Key key_type;

Uwagi

key_typejest synonimem klucza parametru szablonu.

Należy pamiętać, że zarównokey_type, jak i value_type są synonimami klucza parametru szablonu. Oba typy są udostępniane dla klas zestawów i wielu zestawów, w których są identyczne, w celu zachowania zgodności z klasami mapy i multimap, gdzie są one odrębne.

Aby uzyskać więcej informacji na temat klucza, zobacz sekcję Uwagi w temacie hash_multiset Class (Klasa hash_multiset).

Przykład

Zobacz przykład value_type, aby zapoznać się z przykładem sposobu deklarowania i używania elementu key_type.

hash_multiset::lower_bound

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator do pierwszego elementu w hash_multiset z kluczem równym lub większym niż określony klucz.

const_iterator lower_bound(const Key& key) const;

iterator lower_bound(const Key& key);

Parametry

key
Klucz argumentu do porównania z kluczem sortowania elementu z przeszukiwanego hash_multiset.

Wartość zwracana

Iterator lub const_iterator adresujący lokalizację pierwszego elementu w hash_multiset 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_multiset, jeśli nie zostanie znalezione dopasowanie klucza.

Uwagi

Przykład

// hash_multiset_lower_bound.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main() {
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int> :: const_iterator hms1_AcIter, hms1_RcIter;

   hms1.insert( 10 );
   hms1.insert( 20 );
   hms1.insert( 30 );

   hms1_RcIter = hms1.lower_bound( 20 );
   cout << "The element of hash_multiset hms1 with a key of 20 is: "
        << *hms1_RcIter << "." << endl;

   hms1_RcIter = hms1.lower_bound( 40 );

   // If no match is found for the key, end( ) is returned
   if ( hms1_RcIter == hms1.end( ) )
      cout << "The hash_multiset hms1 doesn't have an element "
           << "with a key of 40." << endl;
   else
      cout << "The element of hash_multiset hms1 with a key of 40 is: "
           << *hms1_RcIter << "." << endl;

   // An element at a specific location in the hash_multiset can be found
   // by using a dereferenced iterator that addresses the location
   hms1_AcIter = hms1.end( );
   hms1_AcIter--;
   hms1_RcIter = hms1.lower_bound( *hms1_AcIter );
   cout << "The element of hms1 with a key matching "
        << "that of the last element is: "
        << *hms1_RcIter << "." << endl;
}

hash_multiset::max_size

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca maksymalną długość hash_multiset.

size_type max_size() const;

Wartość zwracana

Maksymalna możliwa długość hash_multiset.

Uwagi

Przykład

// hash_multiset_max_size.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int>::size_type i;

   i = hms1.max_size( );
   cout << "The maximum possible length "
        << "of the hash_multiset is " << i << "." << endl;
}

hash_multiset::operator=

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zastępuje elementy hash_multiset kopią innego hash_multiset.

hash_multiset& operator=(const hash_multiset& right);

hash_multiset& operator=(hash_multiset&& right);

Parametry

Prawy
Hash_multiset kopiowane do pliku hash_multiset.

Uwagi

Po wymazaniu wszystkich istniejących elementów w obiekcie hash_multisetoperator= , kopiuje lub przenosi zawartość bezpośrednio do obiektu hash_multiset.

Przykład

// hash_multiset_operator_as.cpp
// compile with: /EHsc
#include <hash_multiset>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset<int> v1, v2, v3;
   hash_multiset<int>::iterator iter;

   v1.insert(10);

   cout << "v1 = " ;
   for (iter = v1.begin(); iter != v1.end(); iter++)
      cout << iter << " ";
   cout << endl;

   v2 = v1;
   cout << "v2 = ";
   for (iter = v2.begin(); iter != v2.end(); iter++)
      cout << iter << " ";
   cout << endl;

// move v1 into v2
   v2.clear();
   v2 = move(v1);
   cout << "v2 = ";
   for (iter = v2.begin(); iter != v2.end(); iter++)
      cout << iter << " ";
   cout << endl;
}

hash_multiset::p ointer

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który dostarcza wskaźnik do elementu w hash_multiset.

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 wielozestawowym.

hash_multiset::rbegin

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator odnoszący się do pierwszego elementu w odwróconej hash_multiset.

const_reverse_iterator rbegin() const;

reverse_iterator rbegin();

Wartość zwracana

Odwrotny iterator dwukierunkowy odnoszący się do pierwszego elementu w odwróconym hash_multiset lub odnoszący się do tego, co było ostatnim elementem w niereversedowanym hash_multiset.

Uwagi

rbegin jest używany z odwróconym hash_multiset tak jak początek jest używany z hash_multiset.

Jeśli wartość zwracana rbegin elementu jest przypisana do const_reverse_iteratorobiektu , nie można zmodyfikować obiektu hash_multiset. Jeśli wartość zwracana rbegin elementu jest przypisana do reverse_iteratorobiektu , można zmodyfikować obiekt hash_multiset.

rbegin umożliwia iterowanie przez hash_multiset do tyłu.

Przykład

// hash_multiset_rbegin.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int>::iterator hms1_Iter;
   hash_multiset <int>::reverse_iterator hms1_rIter;

   hms1.insert( 10 );
   hms1.insert( 20 );
   hms1.insert( 30 );

   hms1_rIter = hms1.rbegin( );
   cout << "The first element in the reversed hash_multiset is "
        << *hms1_rIter << "." << endl;

   // begin can be used to start an iteration
   // through a hash_multiset in a forward order
   cout << "The hash_multiset is: ";
   for ( hms1_Iter = hms1.begin( ) ; hms1_Iter != hms1.end( );
         hms1_Iter++ )
      cout << *hms1_Iter << " ";
   cout << endl;

   // rbegin can be used to start an iteration
   // through a hash_multiset in a reverse order
   cout << "The reversed hash_multiset is: ";
   for ( hms1_rIter = hms1.rbegin( ) ; hms1_rIter != hms1.rend( );
         hms1_rIter++ )
      cout << *hms1_rIter << " ";
   cout << endl;

   // A hash_multiset element can be erased by dereferencing to its key
   hms1_rIter = hms1.rbegin( );
   hms1.erase ( *hms1_rIter );

   hms1_rIter = hms1.rbegin( );
   cout << "After the erasure, the first element "
        << "in the reversed hash_multiset is "<< *hms1_rIter << "."
        << endl;
}
The first element in the reversed hash_multiset is 30.
The hash_multiset is: 10 20 30
The reversed hash_multiset is: 30 20 10
After the erasure, the first element in the reversed hash_multiset is 20.

hash_multiset::reference

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który zawiera odwołanie do elementu przechowywanego w hash_multiset.

typedef list<typename _Traits::value_type, typename _Traits::allocator_type>::reference reference;

Uwagi

Przykład

// hash_multiset_reference.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;

   hms1.insert( 10 );
   hms1.insert( 20 );

   // Declare and initialize a reference &Ref1 to the 1st element
   int &Ref1 = *hms1.begin( );

   cout << "The first element in the hash_multiset is "
        << Ref1 << "." << endl;

   // The value of the 1st element of the hash_multiset can be
   // changed by operating on its (non const) reference
   Ref1 = Ref1 + 5;

   cout << "The first element in the hash_multiset is now "
        << *hms1.begin() << "." << endl;
}
The first element in the hash_multiset is 10.
The first element in the hash_multiset is now 15.

hash_multiset::rend

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator, który odnosi się do lokalizacji, która zakończyła się powodzeniem ostatniego elementu w odwróconym hash_multiset.

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_multiset (lokalizacja, która poprzedzała pierwszy element w niereversedowanym hash_multiset).

Uwagi

rend jest używany z odwróconym hash_multiset tak samo jak koniec jest używany z hash_multiset.

Jeśli wartość zwracana rend elementu jest przypisana do const_reverse_iteratorobiektu , nie można zmodyfikować obiektu hash_multiset. Jeśli wartość zwracana rend elementu jest przypisana do reverse_iteratorobiektu , można zmodyfikować obiekt hash_multiset. Wartość zwracana przez rend nie powinna być wyłuszczone.

rend umożliwia sprawdzenie, czy iterator odwrotny osiągnął koniec hash_multiset.

Przykład

// hash_multiset_rend.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int>::iterator hms1_Iter;
   hash_multiset <int>::reverse_iterator hms1_rIter;
   hash_multiset <int>::const_reverse_iterator hms1_crIter;

   hms1.insert( 10 );
   hms1.insert( 20 );
   hms1.insert( 30 );

   hms1_rIter = hms1.rend( );
   hms1_rIter--;
   cout << "The last element in the reversed hash_multiset is "
        << *hms1_rIter << "." << endl;

   // end can be used to terminate an iteration
   // through a hash_multiset in a forward order
   cout << "The hash_multiset is: ";
   for ( hms1_Iter = hms1.begin( ) ; hms1_Iter != hms1.end( );
         hms1_Iter++ )
      cout << *hms1_Iter << " ";
   cout << "." << endl;

   // rend can be used to terminate an iteration
   // through a hash_multiset in a reverse order
   cout << "The reversed hash_multiset is: ";
   for ( hms1_rIter = hms1.rbegin( ) ; hms1_rIter != hms1.rend( );
         hms1_rIter++ )
      cout << *hms1_rIter << " ";
   cout << "." << endl;

   hms1_rIter = hms1.rend( );
   hms1_rIter--;
   hms1.erase ( *hms1_rIter );

   hms1_rIter = hms1.rend( );
   hms1_rIter--;
   cout << "After the erasure, the last element in the "
        << "reversed hash_multiset is " << *hms1_rIter << "."
        << endl;
}
The last element in the reversed hash_multiset is 10.
The hash_multiset is: 10 20 30 .
The reversed hash_multiset is: 30 20 10 .
After the erasure, the last element in the reversed hash_multiset is 20.

hash_multiset::reverse_iterator

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który udostępnia iterator dwukierunkowy, który może odczytywać lub modyfikować element w odwróconej hash_multiset.

typedef list<typename Traits::value_type, typename Traits::allocator_type>::reverse_iterator reverse_iterator;

Uwagi

Typ reverse_iterator służy do iterowania hash_multiset odwrotnie.

Przykład

Zobacz przykład dla narzędzia rbegin , aby zapoznać się z przykładem sposobu deklarowania i używania elementu reverse_iterator.

hash_multiset::size

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca liczbę elementów w hash_multiset.

size_type size() const;

Wartość zwracana

Bieżąca długość hash_multiset.

Uwagi

Przykład

// hash_multiset_size.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int> :: size_type i;

   hms1.insert( 1 );
   i = hms1.size( );
   cout << "The hash_multiset length is " << i << "." << endl;

   hms1.insert( 2 );
   i = hms1.size( );
   cout << "The hash_multiset length is now " << i << "." << endl;
}
The hash_multiset length is 1.
The hash_multiset length is now 2.

hash_multiset::size_type

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Niepodpisany typ liczby całkowitej, który może reprezentować liczbę elementów w hash_multiset.

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_multiset::swap

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Wymienia elementy dwóch hash_multisets.

void swap(hash_multiset& right);

Parametry

Prawy
Argument hash_multiset dostarczający elementy, które mają zostać zamienione na hash_multiset docelową.

Uwagi

Funkcja składowa unieważnia żadne odwołania, wskaźniki lub iteratory, które wyznaczają elementy w dwóch hash_multisets, których elementy są wymieniane.

Przykład

// hash_multiset_swap.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1, hms2, hms3;
   hash_multiset <int>::iterator hms1_Iter;

   hms1.insert( 10 );
   hms1.insert( 20 );
   hms1.insert( 30 );
   hms2.insert( 100 );
   hms2.insert( 200 );
   hms3.insert( 300 );

   cout << "The original hash_multiset hms1 is:";
   for ( hms1_Iter = hms1.begin( ); hms1_Iter != hms1.end( );
         hms1_Iter++ )
         cout << " " << *hms1_Iter;
   cout   << "." << endl;

   // This is the member function version of swap
   hms1.swap( hms2 );

   cout << "After swapping with hms2, list hms1 is:";
   for ( hms1_Iter = hms1.begin( ); hms1_Iter != hms1.end( );
         hms1_Iter++ )
         cout << " " << *hms1_Iter;
   cout  << "." << endl;

   // This is the specialized template version of swap
   swap( hms1, hms3 );

   cout << "After swapping with hms3, list hms1 is:";
   for ( hms1_Iter = hms1.begin( ); hms1_Iter != hms1.end( );
         hms1_Iter++ )
         cout << " " << *hms1_Iter;
   cout   << "." << endl;
}
The original hash_multiset hms1 is: 10 20 30.
After swapping with hms2, list hms1 is: 200 100.
After swapping with hms3, list hms1 is: 300.

hash_multiset::upper_bound

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Zwraca iterator do pierwszego elementu w hash_multiset z kluczem większym niż określony klucz.

const_iterator upper_bound(const Key& key) const;

iterator upper_bound(const Key& key);

Parametry

key
Klucz argumentu do porównania z kluczem sortowania elementu z przeszukiwanego hash_multiset.

Wartość zwracana

Iterator lub const_iterator, który adresuje lokalizację pierwszego elementu w hash_multiset z kluczem większym niż klucz argumentu, lub który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w hash_multiset, jeśli nie zostanie znalezione dopasowanie klucza.

Uwagi

Przykład

// hash_multiset_upper_bound.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int> :: const_iterator hms1_AcIter, hms1_RcIter;

   hms1.insert( 10 );
   hms1.insert( 20 );
   hms1.insert( 30 );

   hms1_RcIter = hms1.upper_bound( 20 );
   cout << "The first element of hash_multiset hms1" << endl
        << "with a key greater than 20 is: "
        << *hms1_RcIter << "." << endl;

   hms1_RcIter = hms1.upper_bound( 30 );

   // If no match is found for the key, end( ) is returned
   if ( hms1_RcIter == hms1.end( ) )
      cout << "The hash_multiset hms1 doesn't have an element\n"
           << "with a key greater than 30." << endl;
   else
      cout << "The element of hash_multiset hms1"
           << "with a key > 40 is: "
           << *hms1_RcIter << "." << endl;

   // An element at a specific location in the hash_multiset can be
   // found by using a dereferenced iterator addressing the location
   hms1_AcIter = hms1.begin( );
   hms1_RcIter = hms1.upper_bound( *hms1_AcIter );
   cout << "The first element of hms1 with a key greater than "
        << endl << "that of the initial element of hms1 is: "
        << *hms1_RcIter << "." << endl;
}
The first element of hash_multiset hms1
with a key greater than 20 is: 30.
The hash_multiset hms1 doesn't have an element
with a key greater than 30.
The first element of hms1 with a key greater than
that of the initial element of hms1 is: 20.

hash_multiset::value_comp

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Pobiera kopię obiektu porównania używanego do porządkowenia wartości elementów w hash_multiset.

value_compare value_comp() const;

Wartość zwracana

Zwraca parametr szablonu hash_multiset Traits, który zawiera obiekty funkcji używane do wyznaczania wartości skrótu i porządkować elementy kontenera.

Aby uzyskać więcej informacji na temat cech , zobacz temat Klasa hash_multiset.

Uwagi

Przechowywany obiekt definiuje funkcję składową:

operator bool( constKey&_xVal, const Key& _yVal);

wartość , która zwraca wartość true , jeśli _xVal jest poprzednia i nie jest równa _yVal w kolejności sortowania.

Należy pamiętać, że zarówno key_compare, jak i value_compare są synonimami cech parametru szablonu. Oba typy są udostępniane dla klas hash_multiset i hash_multiset, w których są identyczne, w celu zachowania zgodności z klasami hash_map i hash_multimap, gdzie są one odrębne.

Przykład

// hash_multiset_value_comp.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;

   hash_multiset <int, hash_compare < int, less<int> > > hms1;
   hash_multiset <int, hash_compare < int, less<int> > >::value_compare
      vc1 = hms1.value_comp( );
   bool result1 = vc1( 2, 3 );
   if( result1 == true )
   {
      cout << "vc1( 2,3 ) returns value of true, "
           << "where vc1 is the function object of hms1."
           << endl;
   }
   else
   {
      cout << "vc1( 2,3 ) returns value of false, "
           << "where vc1 is the function object of hms1."
           << endl;
   }

   hash_multiset <int, hash_compare < int, greater<int> > > hms2;
   hash_multiset<int, hash_compare < int, greater<int> > >::
           value_compare vc2 = hms2.value_comp( );
   bool result2 = vc2( 2, 3 );
   if( result2 == true )
   {
      cout << "vc2( 2,3 ) returns value of true, "
           << "where vc2 is the function object of hms2."
           << endl;
   }
   else
   {
      cout << "vc2( 2,3 ) returns value of false, "
           << "where vc2 is the function object of hms2."
           << endl;
   }
}
vc1( 2,3 ) returns value of true, where vc1 is the function object of hms1.
vc2( 2,3 ) returns value of false, where vc2 is the function object of hms2.

hash_multiset::value_compare

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który udostępnia dwa obiekty funkcji, binarny predykat klasy porównywania, który może porównać dwie wartości elementów hash_multiset w celu określenia ich względnej kolejności i jednoargumentowego predykatu, który skróty elementów.

typedef key_compare value_compare;

Uwagi

value_comparejest synonimem cech parametru szablonu.

Aby uzyskać więcej informacji na temat cech , zobacz temat Klasa hash_multiset.

Należy pamiętać, że zarówno key_compare, jak i value_compare są synonimami cech parametru szablonu. Oba typy są udostępniane dla zestawu klas i wielozestawu, gdzie są identyczne, w celu zapewnienia zgodności z mapą klas i wielomapą, gdzie są one odrębne.

Przykład

Zobacz przykład value_comp, aby zapoznać się z przykładem sposobu deklarowania i używania elementu value_compare.

hash_multiset::value_type

Uwaga

Ten interfejs API jest nieaktualny. Alternatywą jest klasa unordered_multiset.

Typ, który opisuje obiekt przechowywany jako element jako hash_multiset w jego pojemności jako wartość.

typedef Key value_type;

Przykład

// hash_multiset_value_type.cpp
// compile with: /EHsc
#include <hash_set>
#include <iostream>

int main( )
{
   using namespace std;
   using namespace stdext;
   hash_multiset <int> hms1;
   hash_multiset <int>::iterator hms1_Iter;

   // Declare value_type
   hash_multiset <int> :: value_type hmsvt_Int;

   hmsvt_Int = 10;   // Initialize value_type

   // Declare key_type
   hash_multiset <int> :: key_type hmskt_Int;
   hmskt_Int = 20;             // Initialize key_type

   hms1.insert( hmsvt_Int );         // Insert value into s1
   hms1.insert( hmskt_Int );         // Insert key into s1

   // A hash_multiset accepts key_types or value_types as elements
   cout << "The hash_multiset has elements:";
   for ( hms1_Iter = hms1.begin() ; hms1_Iter != hms1.end( );
         hms1_Iter++)
      cout << " " << *hms1_Iter;
      cout << "." << endl;
}
The hash_multiset has elements: 10 20.

Zobacz też

Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++