concurrent_unordered_map — Klasa
Klasa concurrent_unordered_map
to kontener bezpieczny pod kontrolą współbieżności, który kontroluje różną długość sekwencji elementów typu std::pair<const K, _Element_type>
. Sekwencja jest reprezentowana w sposób umożliwiający bezpieczne dołączanie współbieżności, dostęp do elementów, dostęp iteratora i operacje przechodzenia iteratora. W tym miejscu wskaźniki lub iteratory są zawsze prawidłowe. Nie jest to gwarancja inicjowania elementów ani określonej kolejności przechodzenia.
Składnia
template <typename K,
typename _Element_type,
typename _Hasher = std::hash<K>,
typename key_equality = std::equal_to<K>,
typename _Allocator_type = std::allocator<std::pair<const K,
_Element_type>>
>,
typename key_equality = std::equal_to<K>,
typename _Allocator_type = std::allocator<std::pair<const K,
_Element_type>>> class concurrent_unordered_map : public details::_Concurrent_hash<details::_Concurrent_unordered_map_traits<K,
_Element_type,
details::_Hash_compare<K,
_Hasher,
key_equality>,
_Allocator_type,
false>>;
Parametry
K
Typ klucza.
_Element_type
Typ mapowany.
_Hasher
Typ obiektu funkcji mieszania. Ten argument jest opcjonalny, a wartość domyślna to std::hash<K>
.
key_equality
Typ obiektu funkcji porównywania równości. Ten argument jest opcjonalny, a wartość domyślna to std::equal_to<K>
.
_Allocator_type
Typ reprezentujący przechowywany obiekt alokatora, który hermetyzuje szczegóły dotyczące alokacji i cofania przydziału pamięci dla współbieżnej nieuporządkowanej mapy. Ten argument jest opcjonalny, a wartość domyślna to std::allocator<std::pair<K
, _Element_type>>
.
Elementy członkowskie
Definicje typów publicznych
Nazwa/nazwisko | opis |
---|---|
allocator_type |
Typ alokatora do zarządzania pamięcią. |
const_iterator |
Typ iteratora stałego dla kontrolowanej sekwencji. |
const_local_iterator |
Typ iteratora stałego przedziału dla kontrolowanej sekwencji. |
const_pointer |
Typ stałego wskaźnika do elementu. |
const_reference |
Typ stałego odwołania do elementu. |
difference_type |
Typ odległości ze znakiem między dwoma elementami. |
hasher |
Typ funkcji mieszania. |
iterator |
Typ iteratora dla kontrolowanej sekwencji. |
key_equal |
Typ funkcji porównywania. |
key_type |
Typ klucza sortowania. |
local_iterator |
Typ iteratora przedziału dla kontrolowanej sekwencji. |
mapped_type |
Typ mapowanej wartości skojarzonej z poszczególnymi kluczami. |
pointer |
Typ wskaźnika do elementu. |
reference |
Typ odwołania do elementu. |
size_type |
Typ odległości bez znaku między dwoma elementami. |
value_type |
Typ elementu. |
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
concurrent_unordered_map | Przeciążone. Tworzy współbieżną nieurządkowaną mapę. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
przy | Przeciążone. Znajduje element w obiekcie concurrent_unordered_map z określoną wartością klucza. Ta metoda jest bezpieczna współbieżności. |
hash_function | Pobiera przechowywany obiekt funkcji mieszania. |
wstawiać | Przeciążone. Dodaje elementy do concurrent_unordered_map obiektu. |
key_eq | Pobiera przechowywany obiekt funkcji porównywania równości. |
zamiana | Zamienia zawartość dwóch concurrent_unordered_map obiektów. Ta metoda nie jest bezpieczna współbieżności. |
unsafe_erase | Przeciążone. Usuwa elementy z concurrent_unordered_map określonych pozycji. Ta metoda nie jest bezpieczna współbieżności. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
operator[] | Przeciążone. Znajduje lub wstawia element z określonym kluczem. Ta metoda jest bezpieczna współbieżności. |
operator = | Przeciążone. Przypisuje zawartość innego concurrent_unordered_map obiektu do tego obiektu. Ta metoda nie jest bezpieczna współbieżności. |
Uwagi
Aby uzyskać szczegółowe informacje na concurrent_unordered_map
temat klasy, zobacz Parallel Containers and Objects (Kontenery równoległe i obiekty).
Hierarchia dziedziczenia
_Traits
_Concurrent_hash
concurrent_unordered_map
Wymagania
Nagłówek: concurrent_unordered_map.h
Przestrzeń nazw: współbieżność
o
Znajduje element w obiekcie concurrent_unordered_map
z określoną wartością klucza. Ta metoda jest bezpieczna współbieżności.
mapped_type& at(const key_type& KVal);
const mapped_type& at(const key_type& KVal) const;
Parametry
KVal
Wartość klucza do znalezienia.
Wartość zwracana
Odwołanie do wartości danych znalezionego elementu.
Uwagi
Jeśli wartość klucza argumentu nie zostanie znaleziona, funkcja zgłasza obiekt klasy out_of_range
.
zaczynać
Zwraca iterator wskazujący pierwszy element w kontenerze współbieżnym. Ta metoda jest bezpieczna współbieżności.
iterator begin();
const_iterator begin() const;
Wartość zwracana
Iterator pierwszego elementu w kontenerze współbieżnym.
cbegin
Zwraca iterator const wskazujący pierwszy element w kontenerze współbieżnym. Ta metoda jest bezpieczna współbieżności.
const_iterator cbegin() const;
Wartość zwracana
Iterator const do pierwszego elementu w kontenerze współbieżnym.
cend
Zwraca iterator const wskazujący lokalizację, która zakończyła się powodzeniem ostatniego elementu w kontenerze współbieżnym. Ta metoda jest bezpieczna współbieżności.
const_iterator cend() const;
Wartość zwracana
Iterator const do lokalizacji zakończył się powodzeniem ostatniego elementu w kontenerze współbieżnym.
jasny
Usuwa wszystkie elementy w kontenerze współbieżnych. Ta funkcja nie jest bezpieczna współbieżności.
void clear();
concurrent_unordered_map
Tworzy współbieżną nieurządkowaną mapę.
explicit concurrent_unordered_map(
size_type _Number_of_buckets = 8,
const hasher& _Hasher = hasher(),
const key_equal& key_equality = key_equal(),
const allocator_type& _Allocator = allocator_type());
concurrent_unordered_map(
const allocator_type& _Allocator);
template <typename _Iterator>
concurrent_unordered_map(_Iterator _Begin,
_Iterator _End,
size_type _Number_of_buckets = 8,
const hasher& _Hasher = hasher(),
const key_equal& key_equality = key_equal(),
const allocator_type& _Allocator = allocator_type());
concurrent_unordered_map(
const concurrent_unordered_map& _Umap);
concurrent_unordered_map(
const concurrent_unordered_map& _Umap,
const allocator_type& _Allocator);
concurrent_unordered_map(
concurrent_unordered_map&& _Umap);
Parametry
_Sterująca
Typ iteratora wejściowego.
_Number_of_buckets
Początkowa liczba zasobników dla tej nieurządzanej mapy.
_Hasher
Funkcja skrótu dla tej nieurządzanej mapy.
key_equality
Funkcja porównania równości dla tej nieurządzanej mapy.
_Programu przydzielania
Alokator dla tej nieurządkowanej mapy.
_Zaczynać
Położenie pierwszego elementu w zakresie elementów do skopiowania.
_Koniec
Położenie pierwszego elementu poza zakresem elementów do skopiowania.
_Umap
Obiekt źródłowy concurrent_unordered_map
do kopiowania lub przenoszenia elementów.
Uwagi
Wszystkie konstruktory przechowują obiekt _Allocator
alokatora i inicjują nieurządkowaną mapę.
Pierwszy konstruktor określa pustą mapę początkową i jawnie określa liczbę zasobników, funkcji skrótu, funkcji równości i typu alokatora do użycia.
Drugi konstruktor określa alokator dla nieurządzanej mapy.
Trzeci konstruktor określa wartości dostarczone przez zakres iteratora [ _Begin
, _End
).
Czwarte i piąte konstruktory określają kopię współbieżnej nieurządkowanej mapy _Umap
.
Ostatni konstruktor określa przeniesienie współbieżnej nieurządzanej mapy _Umap
.
count
Zlicza elementy pasujące do określonego klucza. Ta funkcja jest bezpieczna współbieżności.
size_type count(const key_type& KVal) const;
Parametry
KVal
Klucz do wyszukania.
Wartość zwracana
Liczba razy, ile razy klucz pojawia się w kontenerze.
empty
Sprawdza, czy nie ma żadnych elementów. Ta metoda jest bezpieczna współbieżności.
bool empty() const;
Wartość zwracana
true
jeśli kontener współbieżny jest pusty, false
w przeciwnym razie.
Uwagi
W obecności współbieżnych wstawień, czy współbieżny kontener jest pusty, może ulec zmianie natychmiast po wywołaniu tej funkcji, zanim wartość zwracana jest nawet odczytywana.
end
Zwraca iterator wskazujący lokalizację, która zakończyła się powodzeniem ostatniego elementu w kontenerze współbieżnym. Ta metoda jest bezpieczna współbieżności.
iterator end();
const_iterator end() const;
Wartość zwracana
Iterator do lokalizacji zakończył się powodzeniem ostatniego elementu w kontenerze współbieżnym.
equal_range
Znajduje zakres pasujący do określonego klucza. Ta funkcja jest bezpieczna współbieżności.
std::pair<iterator,
iterator> equal_range(
const key_type& KVal);
std::pair<const_iterator,
const_iterator> equal_range(
const key_type& KVal) const;
Parametry
KVal
Wartość klucza do wyszukania.
Wartość zwracana
Para, w której pierwszy element jest iteratorem na początku, a drugi element jest iteratorem na końcu zakresu.
Uwagi
Współbieżne operacje wstawiania mogą spowodować wstawienie dodatkowych kluczy po iteratorze rozpoczęcia i przed iteratorem końcowym.
find
Wyszukuje element, który odpowiada określonemu kluczowi. Ta funkcja jest bezpieczna współbieżności.
iterator find(const key_type& KVal);
const_iterator find(const key_type& KVal) const;
Parametry
KVal
Wartość klucza do wyszukania.
Wartość zwracana
Iterator wskazujący lokalizację pierwszego elementu, który był zgodny z podanym kluczem, lub iterator end()
, jeśli taki element nie istnieje.
get_allocator
Zwraca przechowywany obiekt alokatora dla tego współbieżnego kontenera. Ta metoda jest bezpieczna współbieżności.
allocator_type get_allocator() const;
Wartość zwracana
Przechowywany obiekt alokatora dla tego kontenera współbieżnego.
hash_function
Pobiera przechowywany obiekt funkcji mieszania.
hasher hash_function() const;
Wartość zwracana
Przechowywany obiekt funkcji skrótu.
insert
Dodaje elementy do concurrent_unordered_map
obiektu.
std::pair<iterator,
bool> insert(
const value_type& value);
iterator insert(
const_iterator _Where,
const value_type& value);
template<class _Iterator>
void insert(_Iterator first,
_Iterator last);
template<class V>
std::pair<iterator,
bool> insert(
V&& value);
template<class V>
typename std::enable_if<!std::is_same<const_iterator,
typename std::remove_reference<V>::type>::value,
iterator>::type insert(
const_iterator _Where,
V&& value);
Parametry
_Sterująca
Typ iteratora używany do wstawiania.
V
Typ wartości wstawionej do mapy.
wartość
Wartość do wstawienia.
_Gdzie
Lokalizacja początkowa do wyszukania punktu wstawiania.
pierwszy
Początek zakresu do wstawienia.
ostatni
Koniec zakresu do wstawienia.
Wartość zwracana
Para zawierająca iterator i wartość logiczną. Aby uzyskać więcej informacji, zobacz sekcję Uwagi.
Uwagi
Pierwsza funkcja składowa określa, czy element X istnieje w sekwencji, której klucz ma równoważną kolejność względem elementu value
. Jeśli nie, tworzy taki element X i inicjuje go za pomocą value
polecenia . Następnie funkcja określa iterator where
, który wyznacza X. Jeśli wystąpiła wstawienie, funkcja zwraca std::pair(where, true)
wartość . W przeciwnym razie zwraca wartość std::pair(where, false)
.
Druga funkcja składowa zwraca metodę insert( value
), używając _Where
jako miejsca początkowego w kontrolowanej sekwencji w celu wyszukania punktu wstawiania.
Trzecia funkcja składowa wstawia sekwencję wartości elementów z zakresu [ first
, last
).
Ostatnie dwie funkcje składowe zachowują się tak samo jak pierwsze dwa, z tą różnicą, że value
są używane do konstruowania wstawionej wartości.
key_eq
Pobiera przechowywany obiekt funkcji porównywania równości.
key_equal key_eq() const;
Wartość zwracana
Przechowywany obiekt funkcji porównywania równości.
load_factor
Oblicza i zwraca bieżący współczynnik obciążenia kontenera. Współczynnik obciążenia to liczba elementów w kontenerze podzielonych przez liczbę zasobników.
float load_factor() const;
Wartość zwracana
Współczynnik obciążenia kontenera.
max_load_factor
Pobiera lub ustawia maksymalny współczynnik obciążenia kontenera. Maksymalny współczynnik obciążenia jest największą liczbą elementów niż może znajdować się w dowolnym zasobniku, zanim kontener powiększy tabelę wewnętrzną.
float max_load_factor() const;
void max_load_factor(float _Newmax);
Parametry
_Newmax
Wartość zwracana
Pierwsza funkcja składowa zwraca przechowywany maksymalny współczynnik obciążenia. Druga funkcja składowa nie zwraca wartości, ale zgłasza wyjątek out_of_range , jeśli podany współczynnik obciążenia jest nieprawidłowy.
max_size
Zwraca maksymalny rozmiar współbieżnego kontenera określonego przez alokator. Ta metoda jest bezpieczna współbieżności.
size_type max_size() const;
Wartość zwracana
Maksymalna liczba elementów, które można wstawić do tego współbieżnego kontenera.
Uwagi
Ta górna wartość granicy może być faktycznie wyższa niż to, co kontener może faktycznie przechowywać.
operator[]
Znajduje lub wstawia element z określonym kluczem. Ta metoda jest bezpieczna współbieżności.
mapped_type& operator[](const key_type& kval);
mapped_type& operator[](key_type&& kval);
Parametry
KVal
Wartość klucza do
znajdź lub wstaw.
Wartość zwracana
Odwołanie do wartości danych znalezionego lub wstawionego elementu.
Uwagi
Jeśli wartość klucza argumentu nie zostanie znaleziona, zostanie ona wstawiona wraz z wartością domyślną typu danych.
operator[]
może służyć do wstawiania elementów do mapy m
przy użyciu metody m[key] = DataValue;
, gdzie DataValue
jest wartością mapped_type
elementu z wartością key
klucza .
W przypadku używania operator[]
polecenia do wstawiania elementów zwrócone odwołanie nie wskazuje, czy wstawienie zmienia wstępnie istniejący element, czy tworzy nowy. Funkcje find
składowe i wstawianie mogą służyć do określenia, czy element z określonym kluczem jest już obecny przed wstawieniem.
operator =
Przypisuje zawartość innego concurrent_unordered_map
obiektu do tego obiektu. Ta metoda nie jest bezpieczna współbieżności.
concurrent_unordered_map& operator= (const concurrent_unordered_map& _Umap);
concurrent_unordered_map& operator= (concurrent_unordered_map&& _Umap);
Parametry
_Umap
Obiekt źródłowy concurrent_unordered_map
.
Wartość zwracana
Odwołanie do tego concurrent_unordered_map
obiektu.
Uwagi
Po wymazaniu wszystkich istniejących elementów wektor współbieżny kopiuje lub przenosi zawartość _Umap
do wektora operator=
współbieżnego.
rehash
Przebudowuje tabelę mieszania.
void rehash(size_type _Buckets);
Parametry
_Wiadra
Żądana liczba zasobników.
Uwagi
Funkcja składowa zmienia liczbę zasobników na co najmniej i _Buckets
ponownie kompiluje tabelę skrótów zgodnie z potrzebami. Liczba zasobników musi być mocą 2. Jeśli nie moc 2, zostanie zaokrąglona do następnej największej mocy 2.
Zgłasza out_of_range wyjątek, jeśli liczba zasobników jest nieprawidłowa (0 lub większa niż maksymalna liczba zasobników).
size
Zwraca liczbę elementów w tym kontenerze współbieżnych. Ta metoda jest bezpieczna współbieżności.
size_type size() const;
Wartość zwracana
Liczba elementów w kontenerze.
Uwagi
W obecności współbieżnych wstawiania liczba elementów w kontenerze współbieżnych może ulec zmianie natychmiast po wywołaniu tej funkcji, zanim wartość zwracana jest nawet odczytywana.
swap
Zamienia zawartość dwóch concurrent_unordered_map
obiektów. Ta metoda nie jest bezpieczna współbieżności.
void swap(concurrent_unordered_map& _Umap);
Parametry
_Umap
Obiekt concurrent_unordered_map
do zamiany.
unsafe_begin
Zwraca iterator do pierwszego elementu w tym kontenerze dla określonego zasobnika.
local_iterator unsafe_begin(size_type _Bucket);
const_local_iterator unsafe_begin(size_type _Bucket) const;
Parametry
_Wiadro
Indeks zasobnika.
Wartość zwracana
Iterator wskazujący początek zasobnika.
unsafe_bucket
Zwraca indeks zasobnika, do którego mapuje określony klucz w tym kontenerze.
size_type unsafe_bucket(const key_type& KVal) const;
Parametry
KVal
Wyszukiwany klucz elementu.
Wartość zwracana
Indeks zasobnika klucza w tym kontenerze.
unsafe_bucket_count
Zwraca bieżącą liczbę zasobników w tym kontenerze.
size_type unsafe_bucket_count() const;
Wartość zwracana
Bieżąca liczba zasobników w tym kontenerze.
unsafe_bucket_size
Zwraca liczbę elementów w określonym zasobniku tego kontenera.
size_type unsafe_bucket_size(size_type _Bucket);
Parametry
_Wiadro
Zasobnik do wyszukania.
Wartość zwracana
Bieżąca liczba zasobników w tym kontenerze.
unsafe_cbegin
Zwraca iterator do pierwszego elementu w tym kontenerze dla określonego zasobnika.
const_local_iterator unsafe_cbegin(size_type _Bucket) const;
Parametry
_Wiadro
Indeks zasobnika.
Wartość zwracana
Iterator wskazujący początek zasobnika.
unsafe_cend
Zwraca iterator do lokalizacji, która zakończyła się powodzeniem ostatniego elementu w określonym zasobniku.
const_local_iterator unsafe_cend(size_type _Bucket) const;
Parametry
_Wiadro
Indeks zasobnika.
Wartość zwracana
Iterator wskazujący początek zasobnika.
unsafe_end
Zwraca iterator do ostatniego elementu w tym kontenerze dla określonego zasobnika.
local_iterator unsafe_end(size_type _Bucket);
const_local_iterator unsafe_end(size_type _Bucket) const;
Parametry
_Wiadro
Indeks zasobnika.
Wartość zwracana
Iterator wskazujący na koniec zasobnika.
unsafe_erase
Usuwa elementy z concurrent_unordered_map
określonych pozycji. Ta metoda nie jest bezpieczna współbieżności.
iterator unsafe_erase(
const_iterator _Where);
iterator unsafe_erase(
const_iterator _Begin,
const_iterator _End);
size_type unsafe_erase(
const key_type& KVal);
Parametry
_Gdzie
Pozycja iteratora do wymazywania z.
_Zaczynać
Położenie pierwszego elementu w zakresie elementów do wymazywania.
_Koniec
Położenie pierwszego elementu poza zakresem elementów do wymazywania.
KVal
Wartość klucza do wymazywania.
Wartość zwracana
Pierwsze dwie funkcje składowe zwracają iterator, który wyznacza pierwszy element pozostały poza usuniętymi elementami lub concurrent_unordered_map::end
(), jeśli taki element nie istnieje. Trzecia funkcja składowa zwraca liczbę usuniętych elementów.
Uwagi
Pierwsza funkcja składowa usuwa element kontrolowanej sekwencji wskazywanej przez _Where
element . Druga funkcja składowa usuwa elementy w zakresie [ _Begin
, _End
).
Trzecia funkcja składowa usuwa elementy w zakresie rozdzielonym przez concurrent_unordered_map::equal_range
(KVal).
unsafe_max_bucket_count
Zwraca maksymalną liczbę zasobników w tym kontenerze.
size_type unsafe_max_bucket_count() const;
Wartość zwracana
Maksymalna liczba zasobników w tym kontenerze.
Zobacz też
Przestrzeń nazw współbieżności
Równoległe kontenery oraz obiekty