Classe concurrent_unordered_map
A classe concurrent_unordered_map
é um contêiner seguro para simultaneidade que controla uma sequência de comprimento variável de elementos do tipo std::pair<const K, _Element_type>
. A sequência é representada de uma forma que permite o acréscimo seguro para simultaneidade, o acesso a elementos, o acesso a iteradores e operações de passagem de iteradores. Aqui, concurrency-safe significa que os ponteiros ou iteradores são sempre válidos. Não é uma garantia de inicialização do elemento ou de uma ordem de passagem específica.
Sintaxe
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>>;
Parâmetros
K
O tipo principal.
_Element_type
O tipo mapeado.
_Hasher
O tipo de objeto da função de hash. Esse argumento é opcional e o valor padrão é std::hash<K>
.
key_equality
O tipo de objeto da função de comparação de igualdade. Esse argumento é opcional e o valor padrão é std::equal_to<K>
.
_Allocator_type
O tipo que representa o objeto alocador armazenado que encapsula detalhes sobre a alocação e a desalocação de memória do mapa não ordenado simultâneo. Esse argumento é opcional e o valor padrão é std::allocator<std::pair<K
, _Element_type>>
.
Membros
Typedefs públicos
Nome | Descrição |
---|---|
allocator_type |
O tipo de um distribuidor para gerenciar o armazenamento. |
const_iterator |
O tipo de um iterador de constante para a sequência controlada. |
const_local_iterator |
O tipo de um iterador de bucket de constante para a sequência controlada. |
const_pointer |
O tipo de um ponteiro de constante para um elemento. |
const_reference |
O tipo de uma referência de constante para um elemento. |
difference_type |
O tipo de uma distância com sinal entre dois elementos. |
hasher |
O tipo de função de hash. |
iterator |
O tipo de um iterador para a sequência controlada. |
key_equal |
O tipo da função de comparação. |
key_type |
O tipo de uma chave de classificação. |
local_iterator |
O tipo de um iterador de bucket para a sequência controlada. |
mapped_type |
O tipo de um valor mapeado associado a cada chave. |
pointer |
O tipo de um ponteiro para um elemento. |
reference |
O tipo de uma referência para um elemento. |
size_type |
O tipo de uma distância sem sinal entre dois elementos. |
value_type |
O tipo de um elemento. |
Construtores públicos
Nome | Descrição |
---|---|
concurrent_unordered_map | Sobrecarregado. Constrói um mapa não ordenado simultâneo. |
Métodos públicos
Nome | Descrição |
---|---|
at | Sobrecarregado. Localiza um elemento em um concurrent_unordered_map com um valor de chave especificado. Esse método é seguro para simultaneidade. |
hash_function | Obtém o objeto armazenado da função de hash. |
insert | Sobrecarregado. Adiciona elementos ao objeto concurrent_unordered_map . |
key_eq | Obtém o objeto da função de comparação de igualdade armazenado. |
troca | Troca o conteúdo de dois concurrent_unordered_map objetos. Esse método não é seguro para simultaneidade. |
unsafe_erase | Sobrecarregado. Remove elementos do concurrent_unordered_map em posições especificadas. Esse método não é seguro para simultaneidade. |
Operadores públicos
Nome | Descrição |
---|---|
operador | Sobrecarregado. Localiza ou insere um elemento com a chave especificada. Esse método é seguro para simultaneidade. |
operator= | Sobrecarregado. Atribui o conteúdo de outro objeto concurrent_unordered_map a este. Esse método não é seguro para simultaneidade. |
Comentários
Para obter informações detalhadas sobre a classe concurrent_unordered_map
, confira Contêineres e objetos paralelos.
Hierarquia de herança
_Traits
_Concurrent_hash
concurrent_unordered_map
Requisitos
Cabeçalho: concurrent_unordered_map.h
Namespace: concurrency
at
Localiza um elemento em um concurrent_unordered_map
com um valor de chave especificado. Esse método é seguro para simultaneidade.
mapped_type& at(const key_type& KVal);
const mapped_type& at(const key_type& KVal) const;
Parâmetros
KVal
O valor de chave a ser localizado.
Valor de retorno
Uma referência ao valor de dados do elemento encontrado.
Comentários
Se o valor da chave do argumento não for encontrado, a função gerará um objeto da classe out_of_range
.
begin
Retorna um iterador que aponta para o primeiro elemento no contêiner simultâneo. Esse método é seguro para simultaneidade.
iterator begin();
const_iterator begin() const;
Valor de retorno
Um iterador para o primeiro elemento no contêiner simultâneo.
cbegin
Retorna um iterador constante que aponta para o primeiro elemento no contêiner simultâneo. Esse método é seguro para simultaneidade.
const_iterator cbegin() const;
Valor de retorno
Um iterador constante para o primeiro elemento no contêiner simultâneo.
cend
Retorna um iterador constante que aponta para o local que fica após o último elemento no contêiner simultâneo. Esse método é seguro para simultaneidade.
const_iterator cend() const;
Valor de retorno
Um iterador constante para o local que fica após o último elemento no contêiner simultâneo.
clear
Apaga todos os elementos no contêiner simultâneo. Essa função não é segura para simultaneidade.
void clear();
concurrent_unordered_map
Constrói um mapa não ordenado simultâneo.
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);
Parâmetros
_Iterator
O tipo do iterador de entrada.
_Number_of_buckets
O número inicial de buckets desse mapa não ordenado.
_Hasher
A função hash desse mapa não ordenado.
key_equality
A função de comparação de igualdade desse mapa não ordenado.
_Allocator
O alocador desse mapa não ordenado.
_Begin
A posição do primeiro elemento no intervalo de elementos a serem copiados.
_End
A posição do primeiro elemento além do intervalo de elementos a serem copiados.
_Umap
O objeto concurrent_unordered_map
de origem do qual copiar ou mover elementos.
Comentários
Todos os construtores armazenam um objeto alocador _Allocator
e iniciam o mapa não ordenado.
O primeiro construtor especifica um mapa inicial vazio e especifica explicitamente o número de buckets, função de hash, função de igualdade e tipo de alocador a serem usados.
O segundo construtor especifica um alocador para o mapa não ordenado.
O terceiro construtor especifica valores fornecidos pelo intervalo do iterador [ _Begin
, _End
).
O quarto e o quinto construtores especificam uma cópia do mapa não ordenado simultâneo _Umap
.
O último construtor especifica uma movimentação do mapa não ordenado simultâneo _Umap
.
count
Conta o número de elementos que correspondem a uma chave especificada. Essa função é segura para simultaneidade.
size_type count(const key_type& KVal) const;
Parâmetros
KVal
A chave a ser pesquisada.
Valor de retorno
O número de vezes que a chave aparece no contêiner.
empty
Testa se nenhum elemento está presente. Esse método é seguro para simultaneidade.
bool empty() const;
Valor de retorno
true
se o contêiner simultâneo estiver vazio; caso contrário, false
.
Comentários
Na presença de inserções simultâneas, se o contêiner simultâneo está vazio ou não pode ser alterado imediatamente após chamar essa função, antes mesmo de o valor retornado ser lido.
end
Retorna um iterador que aponta para o local que fica após o último elemento no contêiner simultâneo. Esse método é seguro para simultaneidade.
iterator end();
const_iterator end() const;
Valor de retorno
Um iterador para o local que fica após o último elemento no contêiner simultâneo.
equal_range
Localiza um intervalo que corresponda a uma chave especificada. Essa função é segura para simultaneidade.
std::pair<iterator,
iterator> equal_range(
const key_type& KVal);
std::pair<const_iterator,
const_iterator> equal_range(
const key_type& KVal) const;
Parâmetros
KVal
O valor chave a ser pesquisado.
Valor de retorno
Um par em que o primeiro elemento é um iterador para o início e o segundo elemento é um iterador para o final do intervalo.
Comentários
É possível que inserções simultâneas causem a inserção de chaves adicionais após o iterador inicial e antes do iterador final.
find
Localiza um elemento que corresponde a uma chave especificada. Essa função é segura para simultaneidade.
iterator find(const key_type& KVal);
const_iterator find(const key_type& KVal) const;
Parâmetros
KVal
O valor chave a ser pesquisado.
Valor de retorno
Um iterador apontando para o local do primeiro elemento que correspondeu à chave fornecida ou ao iterador end()
se nenhum elemento do tipo existir.
get_allocator
Retorna o objeto alocador armazenado para esse contêiner simultâneo. Esse método é seguro para simultaneidade.
allocator_type get_allocator() const;
Valor de retorno
O objeto alocador armazenado para esse contêiner simultâneo.
hash_function
Obtém o objeto armazenado da função de hash.
hasher hash_function() const;
Valor de retorno
O objeto armazenado da função de hash.
insert
Adiciona elementos ao objeto concurrent_unordered_map
.
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);
Parâmetros
_Iterator
O tipo de iterador usado para inserção.
V
O tipo do valor inserido no mapa.
value
Um valor a ser inserido.
_Where
O local inicial para pesquisar um ponto de inserção.
first
O início do intervalo a ser inserido.
last
O final do intervalo a ser inserido.
Valor de retorno
Um par que contém um iterador e um valor booliano. Para obter mais detalhes, consulte a seção Comentários.
Comentários
A primeira função membro determina se um elemento X existe na sequência cuja chave tem ordenação equivalente à de value
. Caso contrário, ela cria esse elemento X e inicializa-o com value
. Em seguida, a função determina o iterador where
que designa X. Se ocorrer uma inserção, a função retornará std::pair(where, true)
. Caso contrário, ele retornará std::pair(where, false)
.
A segunda função membro retorna insert( value
), usando _Where
como um local inicial dentro da sequência controlada para pesquisar o ponto de inserção.
A terceira função membro insere a sequência de valores de elemento do intervalo [ first
, last
).
As duas últimas funções membro se comportam da mesma forma que as duas primeiras, exceto que value
é usada para construir o valor inserido.
key_eq
Obtém o objeto da função de comparação de igualdade armazenado.
key_equal key_eq() const;
Valor de retorno
O objeto da função de comparação de igualdade armazenado.
load_factor
Calcula e retorna o fator de carga atual do contêiner. O fator de carga é o número de elementos no contêiner dividido pelo número de buckets.
float load_factor() const;
Valor de retorno
O fator de carga para o contêiner.
max_load_factor
Obtém ou define o fator de carga máximo do contêiner. O fator de carga máximo é o maior número de elementos que pode estar em qualquer bucket antes que o contêiner aumente sua tabela interna.
float max_load_factor() const;
void max_load_factor(float _Newmax);
Parâmetros
_Newmax
Valor de retorno
A primeira função membro retorna o fator de carga máxima armazenado. A segunda função membro não retorna um valor, mas gera uma exceção out_of_range se o fator de carga fornecido for inválido.
max_size
Retorna o tamanho máximo do contêiner simultâneo, determinado pelo alocador. Esse método é seguro para simultaneidade.
size_type max_size() const;
Valor de retorno
O número máximo de elementos que podem ser inseridos nesse contêiner simultâneo.
Comentários
Esse valor de limite superior pode ser realmente maior do que o que o contêiner pode conter.
operador
Localiza ou insere um elemento com a chave especificada. Esse método é seguro para simultaneidade.
mapped_type& operator[](const key_type& kval);
mapped_type& operator[](key_type&& kval);
Parâmetros
KVal
O valor da chave para
localizar ou inserir.
Valor de retorno
Uma referência ao valor de dados do elemento encontrado ou inserido.
Comentários
Se o valor de chave do argumento não for encontrado, ele será inserido juntamente com o valor padrão do tipo de dados.
operator[]
pode ser usado para inserir elementos em um mapa m
usando m[key] = DataValue;
, em que DataValue
é o valor de mapped_type
do elemento com um valor de chave de key
.
Ao usar operator[]
para inserir elementos, a referência retornada não indica se uma inserção está alterando um elemento preexistente ou criando outro. As funções membro find
e insert podem ser usadas para determinar se um elemento com uma chave especificada já está presente antes de uma inserção.
operator=
Atribui o conteúdo de outro objeto concurrent_unordered_map
a este. Esse método não é seguro para simultaneidade.
concurrent_unordered_map& operator= (const concurrent_unordered_map& _Umap);
concurrent_unordered_map& operator= (concurrent_unordered_map&& _Umap);
Parâmetros
_Umap
O objeto de origem concurrent_unordered_map
.
Valor de retorno
Uma referência a esse objeto concurrent_unordered_map
.
Comentários
Depois de apagar os elementos existentes em um vetor simultâneo, operator=
copia ou move o conteúdo de _Umap
para o vetor simultâneo.
rehash
Recria a tabela de hash.
void rehash(size_type _Buckets);
Parâmetros
_Buckets
O número desejado de buckets.
Comentários
A função membro altera o número de buckets para que seja pelo menos _Buckets
e recria a tabela de hash, conforme necessário. O número de buckets deve ser uma potência de 2. Se não for uma potência de 2, será arredondado para a próxima maior potência de 2.
Ele gera uma exceção out_of_range se o número de buckets for inválido (0 ou maior que o número máximo de buckets).
tamanho
Retorna o número de elementos neste contêiner simultâneo. Esse método é seguro para simultaneidade.
size_type size() const;
Valor de retorno
O número de itens no contêiner.
Comentários
Na presença de inserções simultâneas, o número de elementos no contêiner simultâneo pode ser alterado imediatamente após chamar essa função, antes mesmo de o valor retornado ser lido.
troca
Troca o conteúdo de dois concurrent_unordered_map
objetos. Esse método não é seguro para simultaneidade.
void swap(concurrent_unordered_map& _Umap);
Parâmetros
_Umap
O objeto concurrent_unordered_map
com o qual trocar.
unsafe_begin
Retorna um iterador para o primeiro elemento neste contêiner para um bucket específico.
local_iterator unsafe_begin(size_type _Bucket);
const_local_iterator unsafe_begin(size_type _Bucket) const;
Parâmetros
_Bucket
O índice do bucket.
Valor de retorno
Um iterador que aponta para o início do bucket.
unsafe_bucket
Retorna o índice de bucket para o qual uma chave específica é mapeada neste contêiner.
size_type unsafe_bucket(const key_type& KVal) const;
Parâmetros
KVal
A chave de elemento que está sendo pesquisada.
Valor de retorno
O índice do bucket para a chave neste contêiner.
unsafe_bucket_count
Retorna o número atual de buckets neste contêiner.
size_type unsafe_bucket_count() const;
Valor de retorno
O número atual de buckets neste contêiner.
unsafe_bucket_size
Retorna o número de itens em um bucket específico desse contêiner.
size_type unsafe_bucket_size(size_type _Bucket);
Parâmetros
_Bucket
O bucket a ser pesquisado.
Valor de retorno
O número atual de buckets neste contêiner.
unsafe_cbegin
Retorna um iterador para o primeiro elemento neste contêiner para um bucket específico.
const_local_iterator unsafe_cbegin(size_type _Bucket) const;
Parâmetros
_Bucket
O índice do bucket.
Valor de retorno
Um iterador que aponta para o início do bucket.
unsafe_cend
Retorna um iterador para o local que fica após o último elemento em um bucket específico.
const_local_iterator unsafe_cend(size_type _Bucket) const;
Parâmetros
_Bucket
O índice do bucket.
Valor de retorno
Um iterador que aponta para o início do bucket.
unsafe_end
Retorna um iterador para o último elemento neste contêiner para um bucket específico.
local_iterator unsafe_end(size_type _Bucket);
const_local_iterator unsafe_end(size_type _Bucket) const;
Parâmetros
_Bucket
O índice do bucket.
Valor de retorno
Um iterador que aponta para o final do bucket.
unsafe_erase
Remove elementos do concurrent_unordered_map
em posições especificadas. Esse método não é seguro para simultaneidade.
iterator unsafe_erase(
const_iterator _Where);
iterator unsafe_erase(
const_iterator _Begin,
const_iterator _End);
size_type unsafe_erase(
const key_type& KVal);
Parâmetros
_Where
A posição do iterador da qual apagar.
_Begin
A posição do primeiro elemento no intervalo de elementos a serem apagados.
_End
A posição do primeiro elemento além do intervalo de elementos a serem apagados.
KVal
O valor da chave a ser apagada.
Valor de retorno
As duas primeiras funções membro retornarão um iterador que designa o primeiro elemento restante além de todos os elementos removidos ou concurrent_unordered_map::end
() se esse elemento não existir. A terceira função membro retorna o número de elementos que ela remover.
Comentários
A primeira função membro remove o elemento da sequência controlada apontada por _Where
. A segunda função de membro remove os elementos no intervalo [ _Begin
, _End
).
A terceira função membro remove os elementos no intervalo delimitado por concurrent_unordered_map::equal_range
(KVal).
unsafe_max_bucket_count
Retorna o número máximo de buckets neste contêiner.
size_type unsafe_max_bucket_count() const;
Valor de retorno
O número máximo de buckets neste contêiner.
Confira também
Namespace de simultaneidade
Contêineres e objetos em paralelo