Compartilhar via


Classe unordered_multiset

A classe de modelo descreve um objeto que controla uma sequência de comprimento variado de elementos do tipo const Key. A sequência é ordenada sem muita rigidez por uma função de hash, que particiona a sequência em um conjunto ordenado de subsequências chamado bucket. Dentro de cada bucket uma função de comparação determina se um par de elementos tem ordenação equivalente. Cada elemento serve como uma chave de classificação e um valor. A sequência é representada de forma a permitir pesquisa, inserção e remoção de um elemento com um número arbitrário de operações que podem ser independentes do número de elementos na sequência (tempo constante), pelo menos quando todos os buckets forem de comprimento aproximadamente igual. No pior caso, quando todos os elementos estiverem em um bucket, o número de operações será proporcional ao número de elementos na sequência (tempo linear). Além disso, inserir um elemento não invalida iteradores, e remover um elemento invalida apenas os iteradores que apontam o elemento removido.

template<class Key,
    class Hash = std::hash<Key>,
    class Pred = std::equal_to<Key>,
    class Alloc = std::allocator<Key> >
    class unordered_multiset;

Parâmetros

Parâmetro

Descrição

Key

O tipo principal.

Hash

O tipo de objeto da função de hash.

Pred

O tipo de objeto da função de comparação de igualdade.

Alloc

A classe do alocador.

Membros

Definição do tipo

Descrição

unordered_multiset::allocator_type

O tipo de um distribuidor para gerenciar o armazenamento.

unordered_multiset::const_iterator

O tipo de um iterador de constante para a sequência controlada.

unordered_multiset::const_local_iterator

O tipo de um iterador de bucket de constante para a sequência controlada.

unordered_multiset::const_pointer

O tipo de um ponteiro de constante para um elemento.

unordered_multiset::const_reference

O tipo de uma referência de constante para um elemento.

unordered_multiset::difference_type

O tipo de uma distância com sinal entre dois elementos.

unordered_multiset::hasher

O tipo de função de hash.

unordered_multiset::iterator

O tipo de um iterador para a sequência controlada.

unordered_multiset::key_equal

O tipo da função de comparação.

unordered_multiset::key_type

O tipo de uma chave de classificação.

unordered_multiset::local_iterator

O tipo de um iterador de bucket para a sequência controlada.

unordered_multiset::pointer

O tipo de um ponteiro para um elemento.

unordered_multiset::reference

O tipo de uma referência para um elemento.

unordered_multiset::size_type

O tipo de uma distância sem sinal entre dois elementos.

unordered_multiset::value_type

O tipo de um elemento.

Função membro

Descrição

unordered_multiset::begin

Designa o início da sequência controlada.

unordered_multiset::bucket

Obtém o número de buckets de um valor de chave.

unordered_multiset::bucket_count

Obtém o número de buckets.

unordered_multiset::bucket_size

Obtém o tamanho de um bucket.

unordered_multiset::cbegin

Designa o início da sequência controlada.

unordered_multiset::cend

Designa o fim da sequência controlada.

unordered_multiset::clear

Remove todos os elementos.

unordered_multiset::count

Localiza o número de elementos que correspondem a uma chave especificada.

unordered_multiset::emplace

Adiciona um elemento construído no lugar.

unordered_multiset::emplace_hint

Adiciona um elemento construído no lugar, com dica.

unordered_multiset::empty

Testa se nenhum elemento está presente.

unordered_multiset::end

Designa o fim da sequência controlada.

unordered_multiset::equal_range

Localiza o intervalo que corresponde a uma chave especificada.

unordered_multiset::erase

Remove os elementos em posições especificadas.

unordered_multiset::find

Localiza um elemento que corresponde a uma chave especificada.

unordered_multiset::get_allocator

Obtém o objeto de alocador armazenado.

unordered_multiset::hash_function

Obtém o objeto armazenado da função de hash.

unordered_multiset::insert

Adiciona elementos.

unordered_multiset::key_eq

Obtém o objeto armazenado da função de comparação.

unordered_multiset::load_factor

Conta a média de elementos por bucket.

unordered_multiset::max_bucket_count

Obtém o número máximo de buckets.

unordered_multiset::max_load_factor

Obtém ou define o máximo de elementos por bucket.

unordered_multiset::max_size

Obtém o tamanho máximo da sequência controlada.

unordered_multiset::rehash

Recria a tabela de hash.

unordered_multiset::size

Conta o número de elementos.

unordered_multiset::swap

Alterna o conteúdo de dois contêineres.

unordered_multiset::unordered_multiset

Constrói um objeto contêiner.

Operador

Descrição

unordered_multiset::operator=

Copia uma tabela de hash.

Comentários

O objeto ordena a sequência que ele controla chamando dois objetos armazenados, um objeto de função de comparação do tipo unordered_multiset::key_equal e um objeto de função de hash do tipo unordered_multiset::hasher. Você acessa o primeiro objeto armazenado chamando a função membro unordered_multiset::key_eq(); e acessa o segundo objeto armazenado chamando a função membro unordered_multiset::hash_function(). Especificamente, para todos os valores X e Y do tipo Key, a chamada key_eq()(X, Y) retornará true somente se os dois valores de argumento tiverem ordem equivalente; a chamada hash_function()(keyval) resulta em uma distribuição de valores do tipo size_t. Diferentemente da classe de modelo Classe unordered_set, um objeto da classe de modelo unordered_multiset não garante que key_eq()(X, Y) seja sempre false para um dos dois elementos da sequência controlada. (As chaves não precisam ser exclusivas.)

O objeto também armazena um fator de carga máximo, que especifica o número máximo médio desejado de elementos por bucket. Se a inserção de um elemento fizer com que unordered_multiset::load_factor() exceda o fator de carga máximo, o contêiner aumentará o número de buckets e recriará a tabela de hash conforme a necessidade.

A ordem real de elementos na sequência controlada depende da função de hash, da função de comparação, da ordem de inserção, do fator máximo de carga e do número atual de buckets. Você não pode fazer uma previsão geral da ordem dos elementos na sequência controlada. No entanto, você sempre terá certeza de que qualquer subconjunto de elementos que tenha ordem equivalente será adjacente na sequência de controle.

O objeto aloca e libera armazenamento para a sequência que controla por meio de um objeto armazenado de alocador do tipo unordered_multiset::allocator_type. Esse objeto de alocador deve ter a mesma interface externa que um objeto da classe de modelo allocator. Observe que o objeto de alocador armazenado não é copiado quando o objeto de contêiner é atribuído.

Requisitos

Cabeçalho: <unordered_set>

Namespace: std

Consulte também

Referência

<unordered_set>

Segurança de threads na Biblioteca Padrão C++

Biblioteca de Modelos Padrão

Conceitos

Contêineres