Share via


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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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

Valor de Devolução

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 Devolução

O número máximo de buckets neste contêiner.

Confira também

Namespace de simultaneidade
Contêineres e objetos em paralelo