Compartilhar via


Classe concurrent_unordered_set

A classe concurrent_unordered_set é um contêiner seguro para simultaneidade que controla uma sequência de vários comprimentos de elementos do tipo K. A sequência é representada de uma forma que permite acréscimo seguro para simultaneidade, acesso a elementos, acesso de iterador e operações de passagem do iterador. 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 _Hasher = std::hash<K>,
    typename key_equality = std::equal_to<K>,
    typename _Allocator_type = std::allocator<K>
>,
    typename key_equality = std::equal_to<K>,
    typename _Allocator_type = std::allocator<K>> class concurrent_unordered_set : public details::_Concurrent_hash<details::_Concurrent_unordered_set_traits<K,
    details::_Hash_compare<K,
_Hasher,
    key_equality>,
_Allocator_type,
    false>>;

Parâmetros

K
O tipo principal.

_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 conjunto não ordenado simultâneo. Esse argumento é opcional e o valor padrão é std::allocator<K>.

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.
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_set Sobrecarregado. Constrói um conjunto não ordenado simultâneo.

Métodos públicos

Nome Descrição
hash_function Retorna o objeto armazenado da função de hash.
insert Sobrecarregado. Adiciona elementos ao objeto concurrent_unordered_set.
key_eq Retorna o objeto da função de comparação de igualdade armazenado.
troca Troca o conteúdo de dois concurrent_unordered_set objetos. Esse método não é seguro para simultaneidade.
unsafe_erase Sobrecarregado. Remove elementos do concurrent_unordered_set em posições especificadas. Esse método não é seguro para simultaneidade.

Operadores públicos

Nome Descrição
operator= Sobrecarregado. Atribui o conteúdo de outro objeto concurrent_unordered_set a este. Esse método não é seguro para simultaneidade.

Comentários

Para obter informações detalhadas sobre a classe concurrent_unordered_set, confira Contêineres e objetos paralelos.

Hierarquia de herança

_Traits

_Concurrent_hash

concurrent_unordered_set

Requisitos

Cabeçalho: concurrent_unordered_set.h

Namespace: concurrency

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_set

Constrói um conjunto não ordenado simultâneo.

explicit concurrent_unordered_set(
    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_set(
    const allocator_type& _Allocator);

template <typename _Iterator>
concurrent_unordered_set(_Iterator first,
    _Iterator last,
    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_set(
    const concurrent_unordered_set& _Uset);

concurrent_unordered_set(
    const concurrent_unordered_set& _Uset,
    const allocator_type& _Allocator);

concurrent_unordered_set(
    concurrent_unordered_set&& _Uset);

Parâmetros

_Iterator
O tipo do iterador de entrada.

_Number_of_buckets
O número inicial de buckets desse conjunto não ordenado.

_Hasher
A função hash desse conjunto não ordenado.

key_equality
A função de comparação de igualdade desse conjunto não ordenado.

_Allocator
O alocador desse conjunto não ordenado.

first
last
_Uset
O objeto concurrent_unordered_set de origem do qual copiar ou mover elementos.

Comentários

Todos os construtores armazenam um objeto alocador _Allocator e iniciam o conjunto não ordenado.

O primeiro construtor especifica um conjunto 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 conjunto 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 conjunto não ordenado simultâneo _Uset.

O último construtor especifica uma movimentação do conjunto não ordenado simultâneo _Uset.

contagem

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

Retorna 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_set.

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

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

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

operator=

Atribui o conteúdo de outro objeto concurrent_unordered_set a este. Esse método não é seguro para simultaneidade.

concurrent_unordered_set& operator= (const concurrent_unordered_set& _Uset);

concurrent_unordered_set& operator= (concurrent_unordered_set&& _Uset);

Parâmetros

_Uset
O objeto de origem concurrent_unordered_set .

Valor de retorno

Uma referência a esse objeto concurrent_unordered_set.

Comentários

Depois de apagar os elementos existentes em um conjunto não ordenado simultâneo, operator= copia ou move o conteúdo de _Uset no conjunto não ordenado 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_set objetos. Esse método não é seguro para simultaneidade.

void swap(concurrent_unordered_set& _Uset);

Parâmetros

_Uset
O objeto concurrent_unordered_set 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_set em posições especificadas. Esse método não é seguro para simultaneidade.

iterator unsafe_erase(
    const_iterator _Where);

size_type unsafe_erase(
    const key_type& KVal);

iterator unsafe_erase(
    const_iterator first,
    const_iterator last);

Parâmetros

_Where
A posição do iterador da qual apagar.

KVal
O valor da chave a ser apagada.

first
last
Iteradores.

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 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 apontado 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 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