Classe unordered_map
A classe de modelo descreve um objeto que controla uma sequência de comprimento variado de elementos do tipo std::pair<const Key, Ty>. 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 armazena dois objetos, 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 Ty,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<std::pair<const Key, Ty> > >
class unordered_map;
Parâmetros
Parâmetro |
Descrição |
Key |
O tipo principal. |
Ty |
O tipo mapeado. |
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 |
O tipo de um distribuidor para gerenciar o armazenamento. |
|
O tipo de um iterador de constante para a sequência controlada. |
|
O tipo de um iterador de bucket de constante para a sequência controlada. |
|
O tipo de um ponteiro de constante para um elemento. |
|
O tipo de uma referência de constante para um elemento. |
|
O tipo de uma distância com sinal entre dois elementos. |
|
O tipo de função de hash. |
|
O tipo de um iterador para a sequência controlada. |
|
O tipo da função de comparação. |
|
O tipo de uma chave de classificação. |
|
O tipo de um iterador de bucket para a sequência controlada. |
|
O tipo de um valor mapeado associado a cada chave. |
|
O tipo de um ponteiro para um elemento. |
|
O tipo de uma referência para um elemento. |
|
O tipo de uma distância sem sinal entre dois elementos. |
|
O tipo de um elemento. |
Função membro |
Descrição |
Localiza um elemento com a chave especificada. |
|
Designa o início da sequência controlada. |
|
Obtém o número de buckets de um valor de chave. |
|
Obtém o número de buckets. |
|
Obtém o tamanho de um bucket. |
|
Designa o início da sequência controlada. |
|
Designa o fim da sequência controlada. |
|
Remove todos os elementos. |
|
Localiza o número de elementos que correspondem a uma chave especificada. |
|
Adiciona um elemento construído no lugar. |
|
Adiciona um elemento construído no lugar, com dica. |
|
Testa se nenhum elemento está presente. |
|
Designa o fim da sequência controlada. |
|
Localiza o intervalo que corresponde a uma chave especificada. |
|
Remove os elementos em posições especificadas. |
|
Localiza um elemento que corresponde a uma chave especificada. |
|
Obtém o objeto de alocador armazenado. |
|
Obtém o objeto armazenado da função de hash. |
|
Adiciona elementos. |
|
Obtém o objeto armazenado da função de comparação. |
|
Conta a média de elementos por bucket. |
|
Obtém o número máximo de buckets. |
|
Obtém ou define o máximo de elementos por bucket. |
|
Obtém o tamanho máximo da sequência controlada. |
|
Recria a tabela de hash. |
|
Conta o número de elementos. |
|
Alterna o conteúdo de dois contêineres. |
|
Constrói um objeto contêiner. |
Operador |
Descrição |
Localiza ou insere um elemento com a chave especificada. |
|
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_map::key_equal e um objeto de função de hash do tipo unordered_map::hasher. Você acessa o primeiro objeto armazenado chamando a função membro unordered_map::key_eq(); e acessa o segundo objeto armazenado chamando a função membro unordered_map::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_multimap, um objeto da classe de modelo unordered_map garante que key_eq()(X, Y) seja sempre false para um dos dois elementos da sequência controlada. (As chaves são 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_map::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_map::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_map>
Namespace: std
Consulte também
Referência
Segurança de threads na Biblioteca Padrão C++