Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O modelo de classe descreve um objeto que controla uma sequência de comprimento variável de elementos do tipo std::pair<const Key, Ty>. A sequência é fracamente ordenada por uma função hash, que particiona a sequência em um conjunto ordenado de subsequências chamadas buckets. Dentro de cada bucket, uma função de comparação determina se qualquer par de elementos tem ordem equivalente. Cada elemento armazena dois objetos, uma chave de classificação e um valor. A sequência é representada de uma forma que permite pesquisar, inserir e remover um elemento arbitrário com operações que podem ser independentes do número de elementos na sequência (tempo constante), pelo menos quando todos os buckets têm aproximadamente o mesmo comprimento. Na pior das hipóteses, quando todos os elementos estão em um bucket, o número de operações é proporcional ao número de elementos na sequência (tempo linear). Além disso, inserir um elemento invalida nenhum iterador e remover um elemento invalida apenas os iteradores que apontam para o elemento removido.
Sintaxe
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
Key
O tipo de chave.
Ty
O tipo mapeado.
Hash
O tipo de objeto da função hash.
Pred
O tipo de objeto da função de comparação de igualdade.
Alloc
A classe alocator.
Membros
| Definição de tipo | Descrição |
|---|---|
allocator_type |
O tipo de alocador para gerenciar o armazenamento. |
const_iterator |
O tipo de iterador constante para a sequência controlada. |
const_local_iterator |
O tipo de um iterador de bucket constante para a sequência controlada. |
const_pointer |
O tipo de um ponteiro constante para um elemento. |
const_reference |
O tipo de referência constante a um elemento. |
difference_type |
O tipo de distância assinada entre dois elementos. |
hasher |
O tipo da função hash. |
iterator |
O tipo de iterador para a sequência controlada. |
key_equal |
O tipo da função de comparação. |
key_type |
O tipo de uma chave de ordenaçã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 referência a um elemento. |
size_type |
O tipo de uma distância não assinada entre dois elementos. |
value_type |
O tipo de um elemento. |
| Função de Membro | Descrição |
|---|---|
at |
Localiza um elemento com a chave especificada. |
begin |
Designa o início da sequência controlada. |
bucket |
Obtém o número do bucket para um valor de chave. |
bucket_count |
Obtém o número de buckets. |
bucket_size |
Obtém o tamanho de um balde. |
cbegin |
Designa o início da sequência controlada. |
cend |
Designa o final da sequência controlada. |
clear |
Remove todos os elementos. |
count |
Localiza o número de elementos correspondentes a uma chave especificada. |
contains
C++20 |
Verifique se há um elemento com a chave especificada no unordered_map. |
emplace |
Adiciona um elemento construído no local. |
emplace_hint |
Adiciona um elemento construído no lugar, com dica. |
empty |
Testa se nenhum elemento está presente. |
end |
Designa o final da sequência controlada. |
equal_range |
Localiza o intervalo que corresponde a uma chave especificada. |
erase |
Remove elementos em posições especificadas. |
find |
Localiza um elemento que corresponde a uma chave especificada. |
get_allocator |
Obtém o objeto alocador armazenado. |
hash_function |
Obtém o objeto de função hash armazenado. |
insert |
Adiciona elementos. |
key_eq |
Obtém o objeto de função de comparação armazenado. |
load_factor |
Conta a média de elementos por bucket. |
max_bucket_count |
Obtém o número máximo de buckets. |
max_load_factor |
Obtém ou define o máximo de elementos por bucket. |
max_size |
Obtém o tamanho máximo da sequência controlada. |
rehash |
Reconstrói a tabela de hash. |
size |
Conta o número de elementos. |
swap |
Troca o conteúdo de dois contêineres. |
unordered_map |
Constrói um objeto de contêiner. |
| Operador | Descrição |
|---|---|
unordered_map::operator[] |
Localiza ou insere um elemento com a chave especificada. |
unordered_map::operator= |
Copia uma tabela de hash. |
Comentários
O objeto ordena a sequência que 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 hash do tipo unordered_map::hasher. Você acessa o primeiro objeto armazenado chamando a função de membro unordered_map::key_eq(); e você acessa o segundo objeto armazenado chamando a função de membro unordered_map::hash_function(). Especificamente, para todos os valores X e Y do tipo Key, o key_eq()(X, Y) de chamada retornará true somente se os dois valores de argumento tiverem ordem equivalente; A chamada hash_function()(keyval) produz uma distribuição de valores do tipo size_t. Ao contrário do modelo unordered_multimapde classe, um objeto do tipo unordered_map garante que key_eq()(X, Y) é sempre falso para quaisquer dois elementos da sequência controlada. (As chaves são únicas.)
O objeto também armazena um fator de carga máximo, que especifica o número médio máximo 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 reconstruirá a tabela de hash conforme necessário.
A ordem real dos elementos na sequência controlada depende da função hash, da função de comparação, da ordem de inserção, do fator de carga máximo e do número atual de buckets. Em geral, não é possível prever a ordem dos elementos na sequência controlada. Você sempre pode ter certeza, no entanto, de que qualquer subconjunto de elementos que tenham ordenação equivalente são adjacentes na sequência controlada.
O objeto aloca e libera armazenamento para a sequência que controla por meio de um objeto alocador armazenado do tipo unordered_map::allocator_type. Esse objeto alocador deve ter a mesma interface externa que um objeto do tipo allocator. O objeto alocador armazenado não é copiado quando o objeto contêiner é atribuído.
Requerimentos
Cabeçalho:<unordered_map>
Espaço de nomes: std
unordered_map::allocator_type
O tipo de alocador para gerenciar o armazenamento.
typedef Alloc allocator_type;
Comentários
O tipo é um sinônimo para o parâmetro de modelo Alloc.
Exemplo
// std__unordered_map__unordered_map_allocator_type.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
typedef std::allocator<std::pair<const char, int> > Myalloc;
int main()
{
Mymap c1;
Mymap::allocator_type al = c1.get_allocator();
std::cout << "al == std::allocator() is "
<< std::boolalpha << (al == Myalloc()) << std::endl;
return (0);
}
al == std::allocator() is true
unordered_map::at
Localiza um elemento em um unordered_map com um valor de chave especificado.
Ty& at(const Key& key);
const Ty& at(const Key& key) const;
Parâmetros
key
O valor-chave a ser encontrado.
Valor de retorno
Uma referência ao valor de dados do elemento encontrado.
Comentários
Se o valor da chave de argumento não for encontrado, a função lançará um objeto de classe out_of_range.
Exemplo
// unordered_map_at.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// find and show elements
std::cout << "c1.at('a') == " << c1.at('a') << std::endl;
std::cout << "c1.at('b') == " << c1.at('b') << std::endl;
std::cout << "c1.at('c') == " << c1.at('c') << std::endl;
return (0);
}
unordered_map::begin
Designa o início da sequência controlada ou um balde.
iterator begin();
const_iterator begin() const;
local_iterator begin(size_type nbucket);
const_local_iterator begin(size_type nbucket) const;
Parâmetros
nbucket
O número do balde.
Comentários
As duas primeiras funções de membro retornam um iterador avançado que aponta para o primeiro elemento da sequência (ou logo após o final de uma sequência vazia). As duas últimas funções de membro retornam um iterador de encaminhamento que aponta para o primeiro elemento do bucket nbucket (ou logo após o final de um bucket vazio).
Exemplo
// std__unordered_map__unordered_map_begin.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// inspect first two items " [c 3] [b 2]"
Mymap::iterator it2 = c1.begin();
std::cout << " [" << it2->first << ", " << it2->second << "]";
++it2;
std::cout << " [" << it2->first << ", " << it2->second << "]";
std::cout << std::endl;
// inspect bucket containing 'a'
Mymap::const_local_iterator lit = c1.begin(c1.bucket('a'));
std::cout << " [" << lit->first << ", " << lit->second << "]";
return (0);
}
[c, 3] [b, 2] [a, 1]
[c, 3] [b, 2]
[a, 1]
unordered_map::bucket
Obtém o número do bucket para um valor de chave.
size_type bucket(const Key& keyval) const;
Parâmetros
keyval
O valor-chave a ser mapeado.
Comentários
A função member retorna o número do bucket atualmente correspondente ao valor de chave keyval.
Exemplo
// std__unordered_map__unordered_map_bucket.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// display buckets for keys
Mymap::size_type bs = c1.bucket('a');
std::cout << "bucket('a') == " << bs << std::endl;
std::cout << "bucket_size(" << bs << ") == " << c1.bucket_size(bs)
<< std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
bucket('a') == 7
bucket_size(7) == 1
unordered_map::bucket_count
Obtém o número de buckets.
size_type bucket_count() const;
Comentários
A função member retorna o número atual de buckets.
Exemplo
// std__unordered_map__unordered_map_bucket_count.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
return (0);
}
[c, 3][b, 2][a, 1]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1
unordered_map::bucket_size
Obtém o tamanho de um balde
size_type bucket_size(size_type nbucket) const;
Parâmetros
nbucket
O número do balde.
Comentários
As funções de membro retornam o tamanho do número do bucket nbucket.
Exemplo
// std__unordered_map__unordered_map_bucket_size.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// display buckets for keys
Mymap::size_type bs = c1.bucket('a');
std::cout << "bucket('a') == " << bs << std::endl;
std::cout << "bucket_size(" << bs << ") == " << c1.bucket_size(bs)
<< std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
bucket('a') == 7
bucket_size(7) == 1
unordered_map::cbegin
Retorna um iterador const que aborda o primeiro elemento no intervalo.
const_iterator cbegin() const;
Valor de retorno
Um const iterador de acesso direto que aponta para o primeiro elemento do intervalo ou para o local logo após o final de um intervalo vazio (para um intervalo vazio, cbegin() == cend()).
Comentários
Com o valor de retorno de cbegin, os elementos no intervalo não podem ser modificados.
Você pode usar essa função de membro no lugar da função de membro begin() para garantir que o valor de retorno seja const_iterator. Normalmente, ele é usado com a palavra-chave de dedução de tipo auto, conforme mostrado no exemplo a seguir. No exemplo, considere Container como um recipiente modificável (não const) de qualquer tipo que suporte begin() e cbegin().
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
unordered_map::cend
Retorna um iterador const que aborda o local logo após o último elemento de um intervalo.
const_iterator cend() const;
Valor de retorno
Um const iterador de acesso direto que aponta para além do final do intervalo.
Comentários
cend é usado para testar se um iterador passou no final de seu intervalo.
Você pode usar essa função de membro no lugar da função de membro end() para garantir que o valor de retorno seja const_iterator. Normalmente, ele é usado com a palavra-chave de dedução de tipo auto, conforme mostrado no exemplo a seguir. No exemplo, considere Container como um recipiente modificável (não const) de qualquer tipo que suporte end() e cend().
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
O valor retornado por cend não deve ser desreferenciado.
unordered_map::clear
Remove todos os elementos.
void clear();
Comentários
A função de membro chama unordered_map::erase(unordered_map::begin(), unordered_map::end()), consulte unordered_map::erase, unordered_map::begine unordered_map::end.
Exemplo
// std__unordered_map__unordered_map_clear.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// clear the container and reinspect
c1.clear();
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
std::cout << std::endl;
c1.insert(Mymap::value_type('d', 4));
c1.insert(Mymap::value_type('e', 5));
// display contents " [e 5] [d 4]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
size == 0
empty() == true
[e, 5] [d, 4]
size == 2
empty() == false
unordered_map::const_iterator
O tipo de iterador constante para a sequência controlada.
typedef T1 const_iterator;
Comentários
O tipo descreve um objeto que pode servir como um iterador de encaminhamento constante para a sequência controlada. É descrito aqui como sinônimo do tipo definido pela implementação T1.
Exemplo
// std__unordered_map__unordered_map_const_iterator.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
unordered_map::const_local_iterator
O tipo de um iterador de bucket constante para a sequência controlada.
typedef T5 const_local_iterator;
Comentários
O tipo descreve um objeto que pode servir como um iterador de encaminhamento constante para um bucket. É descrito aqui como sinônimo do tipo definido pela implementação T5.
Exemplo
// std__unordered_map__unordered_map_const_local_iterator.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// inspect bucket containing 'a'
Mymap::const_local_iterator lit = c1.begin(c1.bucket('a'));
std::cout << " [" << lit->first << ", " << lit->second << "]";
return (0);
}
[c, 3] [b, 2] [a, 1]
[a, 1]
unordered_map::const_pointer
O tipo de um ponteiro constante para um elemento.
typedef Alloc::const_pointer const_pointer;
Comentários
O tipo descreve um objeto que pode servir como um ponteiro constante para um elemento da sequência controlada.
Exemplo
// std__unordered_map__unordered_map_const_pointer.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::iterator it = c1.begin();
it != c1.end(); ++it)
{
Mymap::const_pointer p = &*it;
std::cout << " [" << p->first << ", " << p->second << "]";
}
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
unordered_map::const_reference
O tipo de referência constante a um elemento.
typedef Alloc::const_reference const_reference;
Comentários
O tipo descreve um objeto que pode servir como uma referência constante a um elemento da sequência controlada.
Exemplo
// std__unordered_map__unordered_map_const_reference.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::iterator it = c1.begin();
it != c1.end(); ++it)
{
Mymap::const_reference ref = *it;
std::cout << " [" << ref.first << ", " << ref.second << "]";
}
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
unordered_map::contains
Verifica se há um elemento no unordered_map com a chave especificada.
Introduzido em C++20.
bool contains(const Key& key) const;
<class K> bool contains(const K& key) const;
Parâmetros
K
O tipo da chave.
key
O valor-chave do elemento a procurar.
Valor de retorno
true se o elemento for encontrado no recipiente; false o contrário.
Comentários
contains() é novo no C++20. Para usá-lo, especifique a opção de compilador /std:c++20 ou posterior.
template<class K> bool contains(const K& key) const só participa na resolução de sobrecarga se key_compare for transparente.
Exemplo
// Requires /std:c++20 or later
#include <unordered_map>
#include <iostream>
int main()
{
std::unordered_map<int, bool> theUnorderedMap = {{0, false}, {1,true}};
std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
std::cout << theUnorderedMap.contains(1) << '\n';
std::cout << theUnorderedMap.contains(2) << '\n';
return 0;
}
true
false
unordered_map::count
Localiza o número de elementos correspondentes a uma chave especificada.
size_type count(const Key& keyval) const;
Parâmetros
keyval
Valor chave para pesquisar.
Comentários
A função membro retorna o número de elementos no intervalo delimitado por unordered_map::equal_range(keyval).
Exemplo
// std__unordered_map__unordered_map_count.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
std::cout << "count('A') == " << c1.count('A') << std::endl;
std::cout << "count('b') == " << c1.count('b') << std::endl;
std::cout << "count('C') == " << c1.count('C') << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
count('A') == 0
count('b') == 1
count('C') == 0
unordered_map::difference_type
O tipo de distância assinada entre dois elementos.
typedef T3 difference_type;
Comentários
O tipo inteiro assinado descreve um objeto que pode representar a diferença entre os endereços de quaisquer dois elementos na sequência controlada. É descrito aqui como sinônimo do tipo definido pela implementação T3.
Exemplo
// std__unordered_map__unordered_map_difference_type.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// compute positive difference
Mymap::difference_type diff = 0;
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
++diff;
std::cout << "end()-begin() == " << diff << std::endl;
// compute negative difference
diff = 0;
for (Mymap::const_iterator it = c1.end();
it != c1.begin(); --it)
--diff;
std::cout << "begin()-end() == " << diff << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
end()-begin() == 3
begin()-end() == -3
unordered_map::emplace
Insere um elemento construído no local (nenhuma operação de cópia ou movimentação é executada) em um unordered_map.
template <class... Args>
pair<iterator, bool> emplace( Args&&... args);
Parâmetros
args
Os argumentos encaminhados para construir um elemento a ser inserido no unordered_map a menos que ele já contenha um elemento cujo valor seja ordenado equivalentemente.
Valor de retorno
Um pair cujo componente bool retorna true se uma inserção foi feita e false se o unordered_map já continha um elemento cuja chave tinha um valor equivalente na ordenação e cujo componente iterador retorna o endereço onde um novo elemento foi inserido ou onde o elemento já estava localizado.
Para acessar o componente iterador de um par de pr retornado por essa função de membro, use pr.firste, para desreferenciar, use *(pr.first). Para acessar o componente bool de um par pr retornado por essa função de membro, use pr.second.
Comentários
Nenhum iterador ou referência é invalidado por esta função.
Durante a inserção, se uma exceção for lançada, mas não ocorrer na função hash do contêiner, o contêiner não será modificado. Se a exceção for lançada na função hash, o resultado será indefinido.
Para obter um exemplo de código, consulte map::emplace.
unordered_map::emplace_hint
Insere um elemento construído no local (nenhuma operação de cópia ou movimentação é executada), com uma dica de posicionamento.
template <class... Args>
iterator emplace_hint(const_iterator where, Args&&... args);
Parâmetros
args
Os argumentos encaminhados para construir um elemento a ser inserido no unordered_map a menos que o unordered_map já contenha esse elemento ou, mais geralmente, a menos que já contenha um elemento cuja chave esteja ordenada de forma equivalente.
where
Uma dica sobre o local para começar a procurar o ponto correto de inserção.
Valor de retorno
Um iterador para o elemento recém-inserido.
Se a inserção falhou porque o elemento já existe, retorna um iterador para o elemento existente.
Comentários
Nenhuma referência é invalidada por esta função.
Durante a inserção, se uma exceção for lançada, mas não ocorrer na função hash do contêiner, o contêiner não será modificado. Se a exceção for lançada na função hash, o resultado será indefinido.
O value_type de um elemento é um par, de modo que o valor de um elemento será um par ordenado com o primeiro componente igual ao valor da chave e o segundo componente igual ao valor de dados do elemento.
Para obter um exemplo de código, consulte map::emplace_hint.
unordered_map::empty
Testa se nenhum elemento está presente.
bool empty() const;
Comentários
A função de membro retorna true para uma sequência controlada vazia.
Exemplo
// std__unordered_map__unordered_map_empty.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// clear the container and reinspect
c1.clear();
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
std::cout << std::endl;
c1.insert(Mymap::value_type('d', 4));
c1.insert(Mymap::value_type('e', 5));
// display contents " [e 5] [d 4]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
size == 0
empty() == true
[e, 5] [d, 4]
size == 2
empty() == false
unordered_map::end
Designa o final da sequência controlada.
iterator end();
const_iterator end() const;
local_iterator end(size_type nbucket);
const_local_iterator end(size_type nbucket) const;
Parâmetros
nbucket
O número do balde.
Comentários
As duas primeiras funções de membro retornam um iterador avançado que aponta logo após o final da sequência. As duas últimas funções de membro retornam um iterador de encaminhamento que aponta logo além do final do bucket nbucket.
unordered_map::equal_range
Localiza o intervalo que corresponde a uma chave especificada.
std::pair<iterator, iterator> equal_range(const Key& keyval);
std::pair<const_iterator, const_iterator> equal_range(const Key& keyval) const;
Parâmetros
keyval
Valor chave para pesquisar.
Comentários
A função membro retorna um par de iteradores X tal que [X.first, X.second) delimita apenas os elementos da sequência controlada que têm ordem equivalente com keyval. Se tais elementos não existirem, ambos os iteradores serão end().
Exemplo
// std__unordered_map__unordered_map_equal_range.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// display results of failed search
std::pair<Mymap::iterator, Mymap::iterator> pair1 =
c1.equal_range('x');
std::cout << "equal_range('x'):";
for (; pair1.first != pair1.second; ++pair1.first)
std::cout << " [" << pair1.first->first
<< ", " << pair1.first->second << "]";
std::cout << std::endl;
// display results of successful search
pair1 = c1.equal_range('b');
std::cout << "equal_range('b'):";
for (; pair1.first != pair1.second; ++pair1.first)
std::cout << " [" << pair1.first->first
<< ", " << pair1.first->second << "]";
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
equal_range('x'):
equal_range('b'): [b, 2]
unordered_map::erase
Remove um elemento ou um intervalo de elementos em um unordered_map de posições especificadas ou remove elementos que correspondem a uma chave especificada.
iterator erase(const_iterator Where);
iterator erase(const_iterator First, const_iterator Last);
size_type erase(const key_type& Key);
Parâmetros
Where
Posição do elemento a remover.
First
Posição do primeiro elemento a ser removido.
Last
Posicione logo após o último elemento a ser removido.
Key
O valor-chave dos elementos a serem removidos.
Valor de retorno
Para as duas primeiras funções de membro, um iterador bidirecional que designa o primeiro elemento restante além de quaisquer elementos removidos, ou um elemento que é o final do mapa, se tal elemento não existir.
Para a terceira função de membro, retorna o número de elementos que foram removidos do unordered_map.
Comentários
Para obter um exemplo de código, consulte map::erase.
unordered_map::encontrar
Localiza um elemento que corresponde a uma chave especificada.
const_iterator find(const Key& keyval) const;
Parâmetros
keyval
Valor chave para pesquisar.
Comentários
A função de membro retorna unordered_map::equal_range(keyval).first.
Exemplo
// std__unordered_map__unordered_map_find.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// try to find and fail
std::cout << "find('A') == "
<< std::boolalpha << (c1.find('A') != c1.end()) << std::endl;
// try to find and succeed
Mymap::iterator it = c1.find('b');
std::cout << "find('b') == "
<< std::boolalpha << (it != c1.end())
<< ": [" << it->first << ", " << it->second << "]" << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
find('A') == false
find('b') == true: [b, 2]
unordered_map::get_allocator
Obtém o objeto alocador armazenado.
Alloc get_allocator() const;
Comentários
A função member retorna o objeto alocador armazenado.
Exemplo
// std__unordered_map__unordered_map_get_allocator.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
typedef std::allocator<std::pair<const char, int> > Myalloc;
int main()
{
Mymap c1;
Mymap::allocator_type al = c1.get_allocator();
std::cout << "al == std::allocator() is "
<< std::boolalpha << (al == Myalloc()) << std::endl;
return (0);
}
al == std::allocator() is true
unordered_map::hash_function
Obtém o objeto de função hash armazenado.
Hash hash_function() const;
Comentários
A função member retorna o objeto de função hash armazenado.
Exemplo
// std__unordered_map__unordered_map_hash_function.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
Mymap::hasher hfn = c1.hash_function();
std::cout << "hfn('a') == " << hfn('a') << std::endl;
std::cout << "hfn('b') == " << hfn('b') << std::endl;
return (0);
}
hfn('a') == 1630279
hfn('b') == 1647086
unordered_map::hasher
O tipo da função hash.
typedef Hash hasher;
Comentários
O tipo é um sinônimo para o parâmetro de modelo Hash.
Exemplo
// std__unordered_map__unordered_map_hasher.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
Mymap::hasher hfn = c1.hash_function();
std::cout << "hfn('a') == " << hfn('a') << std::endl;
std::cout << "hfn('b') == " << hfn('b') << std::endl;
return (0);
}
hfn('a') == 1630279
hfn('b') == 1647086
unordered_map::insert
Insere um elemento ou um intervalo de elementos em um unordered_map.
// (1) single element
pair<iterator, bool> insert( const value_type& Val);
// (2) single element, perfect forwarded
template <class ValTy>
pair<iterator, bool>
insert( ValTy&& Val);
// (3) single element with hint
iterator insert( const_iterator Where,
const value_type& Val);
// (4) single element, perfect forwarded, with hint
template <class ValTy>
iterator insert( const_iterator Where,
ValTy&& Val);
// (5) range
template <class InputIterator>
void insert(InputIterator First,
InputIterator Last);
// (6) initializer list
void insert(initializer_list<value_type>
IList);
Parâmetros
Val
O valor de um elemento a ser inserido no unordered_map a menos que ele já contenha um elemento cuja chave esteja ordenada de forma equivalente.
Where
O lugar para começar a procurar o ponto correto de inserção.
ValTy
Parâmetro de modelo que especifica o tipo de argumento que o unordered_map pode usar para construir um elemento de value_typee perfect-forwards Val como um argumento.
First
A posição do primeiro elemento a ser copiado.
Last
A posição logo após o último elemento a ser copiado.
InputIterator
Argumento de função de modelo que atende aos requisitos de um iterador de entrada que aponta para elementos de um tipo que podem ser usados para construir objetos value_type.
IList
O initializer_list do qual copiar os elementos.
Valor de retorno
As funções de membro de elemento único, (1) e (2), retornam um pair cujo componente bool é true se uma inserção foi feita, e false se o unordered_map já continha um elemento cuja chave tinha um valor equivalente na ordem. O componente iterador do par retorno-valor aponta para o elemento recém-inserido se o componente bool for true, ou para o elemento existente se o componente bool for false.
As funções de membro single-element-with-hint, (3) e (4), retornam um iterador que aponta para a posição onde o novo elemento foi inserido no unordered_map ou, se um elemento com uma chave equivalente já existir, para o elemento existente.
Comentários
Nenhum iterador, ponteiro ou referência é invalidado por esta função.
Durante a inserção de apenas um elemento, se uma exceção for lançada, mas não ocorrer na função hash do contêiner, o estado do contêiner não será modificado. Se a exceção for lançada na função hash, o resultado será indefinido. Durante a inserção de vários elementos, se uma exceção for lançada, o contêiner será deixado em um estado não especificado, mas válido.
Para acessar o componente iterador de um pairpr retornado pelas funções de membro de elemento único, use pr.first; Para cancelar a referência do iterador dentro do par retornado, use *pr.first, fornecendo um elemento . Para acessar o componente bool, use pr.second. Para obter um exemplo, consulte o código de exemplo mais adiante neste artigo.
O value_type de um contêiner é um typedef que pertence ao contêiner e, para mapa, map<K, V>::value_type é pair<const K, V>. O valor de um elemento é um par ordenado no qual o primeiro componente é igual ao valor da chave e o segundo componente é igual ao valor de dados do elemento.
A função de membro do intervalo (5) insere a sequência de valores de elementos em um unordered_map que corresponde a cada elemento abordado por um iterador no intervalo [First, Last); portanto, Last não é inserido. A função de membro do contêiner end() refere-se à posição logo após o último elemento no contêiner — por exemplo, a instrução m.insert(v.begin(), v.end()); tenta inserir todos os elementos de v em m. Apenas os elementos que têm valores exclusivos no intervalo são inseridos; duplicados são ignorados. Para observar quais elementos são rejeitados, use as versões de elemento único do insert.
A função de membro da lista do inicializador (6) usa um initializer_list para copiar elementos para o unordered_map.
Para inserção de um elemento construído no local, ou seja, nenhuma operação de cópia ou movimentação é executada, consulte unordered_map::emplace e unordered_map::emplace_hint.
Para obter um exemplo de código, consulte map::insert.
unordered_map::iterator
O tipo de iterador para a sequência controlada.
typedef T0 iterator;
Comentários
O tipo descreve um objeto que pode servir como um iterador de encaminhamento para a sequência controlada. É descrito aqui como sinônimo do tipo definido pela implementação T0.
Exemplo
// std__unordered_map__unordered_map_iterator.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
unordered_map::key_eq
Obtém o objeto de função de comparação armazenado.
Pred key_eq() const;
Comentários
A função member retorna o objeto de função de comparação armazenado.
Exemplo
// std__unordered_map__unordered_map_key_eq.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
Mymap::key_equal cmpfn = c1.key_eq();
std::cout << "cmpfn('a', 'a') == "
<< std::boolalpha << cmpfn('a', 'a') << std::endl;
std::cout << "cmpfn('a', 'b') == "
<< std::boolalpha << cmpfn('a', 'b') << std::endl;
return (0);
}
cmpfn('a', 'a') == true
cmpfn('a', 'b') == false
unordered_map::key_equal
O tipo da função de comparação.
typedef Pred key_equal;
Comentários
O tipo é um sinônimo para o parâmetro de modelo Pred.
Exemplo
// std__unordered_map__unordered_map_key_equal.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
Mymap::key_equal cmpfn = c1.key_eq();
std::cout << "cmpfn('a', 'a') == "
<< std::boolalpha << cmpfn('a', 'a') << std::endl;
std::cout << "cmpfn('a', 'b') == "
<< std::boolalpha << cmpfn('a', 'b') << std::endl;
return (0);
}
cmpfn('a', 'a') == true
cmpfn('a', 'b') == false
unordered_map::key_type
O tipo de uma chave de ordenação.
typedef Key key_type;
Comentários
O tipo é um sinônimo para o parâmetro de modelo Key.
Exemplo
// std__unordered_map__unordered_map_key_type.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// add a value and reinspect
Mymap::key_type key = 'd';
Mymap::mapped_type mapped = 4;
Mymap::value_type val = Mymap::value_type(key, mapped);
c1.insert(val);
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
[d, 4] [c, 3] [b, 2] [a, 1]
unordered_map::load_factor
Conta a média de elementos por bucket.
float load_factor() const;
Comentários
A função de membro retorna (float)unordered_map::size() / (float)unordered_map::bucket_count(), o número médio de elementos por bucket, consulte unordered_map::size e unordered_map::bucket_count.
Exemplo
// std__unordered_map__unordered_map_load_factor.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1
unordered_map::local_iterator
O tipo de um iterador de bucket.
typedef T4 local_iterator;
Comentários
O tipo descreve um objeto que pode servir como um iterador de encaminhamento para um bucket. É descrito aqui como sinônimo do tipo definido pela implementação T4.
Exemplo
// std__unordered_map__unordered_map_local_iterator.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// inspect bucket containing 'a'
Mymap::local_iterator lit = c1.begin(c1.bucket('a'));
std::cout << " [" << lit->first << ", " << lit->second << "]";
return (0);
}
[c, 3] [b, 2] [a, 1]
[a, 1]
unordered_map::mapped_type
O tipo de um valor mapeado associado a cada chave.
typedef Ty mapped_type;
Comentários
O tipo é um sinônimo para o parâmetro de modelo Ty.
Exemplo
// std__unordered_map__unordered_map_mapped_type.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// add a value and reinspect
Mymap::key_type key = 'd';
Mymap::mapped_type mapped = 4;
Mymap::value_type val = Mymap::value_type(key, mapped);
c1.insert(val);
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
[d, 4] [c, 3] [b, 2] [a, 1]
unordered_map::max_bucket_count
Obtém o número máximo de buckets.
size_type max_bucket_count() const;
Comentários
A função member retorna o número máximo de buckets atualmente permitido.
Exemplo
// std__unordered_map__unordered_map_max_bucket_count.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1
unordered_map::max_load_factor
Obtém ou define o máximo de elementos por bucket.
float max_load_factor() const;
void max_load_factor(float factor);
Parâmetros
factor
O novo fator de carga máximo.
Comentários
A primeira função de membro retorna o fator de carga máximo armazenado. A segunda função de membro substitui o fator de carga máximo armazenado por factor.
Exemplo
// std__unordered_map__unordered_map_max_load_factor.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1
unordered_map::max_size
Obtém o tamanho máximo da sequência controlada.
size_type max_size() const;
Comentários
A função member retorna o comprimento da sequência mais longa que o objeto pode controlar.
Exemplo
// std__unordered_map__unordered_map_max_size.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
std::cout << "max_size() == " << c1.max_size() << std::endl;
return (0);
}
max_size() == 536870911
unordered_map::operator[]
Localiza ou insere um elemento com a chave especificada.
Ty& operator[](const Key& keyval);
Ty& operator[](Key&& keyval);
Parâmetros
keyval
O valor da chave a ser localizado ou inserido.
Valor de retorno
Uma referência ao valor de dados do elemento inserido.
Comentários
Se o valor da chave de argumento não for encontrado, ele será inserido junto com o valor padrão do tipo de dados.
operator[] pode ser usado para inserir elementos em um mapa m usando m[Key] = DataValue; onde DataValue é o valor da mapped_type do elemento com um valor de chave de Key.
A função de membro determina o iterador where como o valor de retorno de unordered_map::insert(unordered_map::value_type(keyval, Ty()). Para obter mais informações, consulte unordered_map::insert e unordered_map::value_type. (Ele insere um elemento com a chave especificada se esse elemento não existir.) Em seguida, ele retorna uma referência a (*where).second.
Ao usar operator[] para inserir elementos, a referência retornada não indica se uma inserção está alterando um elemento pré-existente ou criando um novo. As funções de membro find e insert podem ser usadas para determinar se um elemento com uma chave especificada já está presente antes de uma inserção.
Exemplo
// std__unordered_map__unordered_map_operator_sub.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
#include <string>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// try to find and fail
std::cout << "c1['A'] == " << c1['A'] << std::endl;
// try to find and succeed
std::cout << "c1['a'] == " << c1['a'] << std::endl;
// redisplay contents
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// insert by moving key
std::unordered_map<string, int> c2;
std::string str("abc");
std::cout << "c2[std::move(str)] == " << c2[std::move(str)] << std::endl;
std::cout << "c2["abc"] == " << c2["abc"] << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
c1['A'] == 0
c1['a'] == 1
[c, 3] [b, 2] [A, 0] [a, 1]
c2[move(str)] == 0
c2["abc"] == 1
unordered_map::operator=
Substitui os elementos deste unordered_map usando os elementos de outro unordered_map.
unordered_map& operator=(const unordered_map& right);
unordered_map& operator=(unordered_map&& right);
Parâmetros
right
O unordered_map a partir do qual a função do operador atribui conteúdo.
Comentários
A primeira versão copia todos os elementos de right para este unordered_map.
A segunda versão move todos os elementos de right para este unordered_map.
Todos os elementos que estão neste unordered_map antes operator= executa são descartados.
Exemplo
// unordered_map_operator_as.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
int main( )
{
using namespace std;
unordered_map<int, int> v1, v2, v3;
unordered_map<int, int>::iterator iter;
v1.insert(pair<int, int>(1, 10));
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << iter->second << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = move(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
}
unordered_map::pointer
O tipo de um ponteiro para um elemento.
typedef Alloc::pointer pointer;
Comentários
O tipo descreve um objeto que pode servir como um ponteiro para um elemento da sequência controlada.
Exemplo
// std__unordered_map__unordered_map_pointer.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::iterator it = c1.begin();
it != c1.end(); ++it)
{
Mymap::pointer p = &*it;
std::cout << " [" << p->first << ", " << p->second << "]";
}
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
unordered_map::reference
O tipo de referência a um elemento.
typedef Alloc::reference reference;
Comentários
O tipo descreve um objeto que pode servir como referência a um elemento da sequência controlada.
Exemplo
// std__unordered_map__unordered_map_reference.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::iterator it = c1.begin();
it != c1.end(); ++it)
{
Mymap::reference ref = *it;
std::cout << " [" << ref.first << ", " << ref.second << "]";
}
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
unordered_map::rehash
Reconstrói a tabela de hash.
void rehash(size_type nbuckets);
Parâmetros
nbuckets
O número solicitado de buckets.
Comentários
A função de membro altera o número de buckets para ser pelo menos nbuckets e reconstrói a tabela de hash conforme necessário.
Exemplo
// std__unordered_map__unordered_map_rehash.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
bucket_count() == 8
load_factor() == 0.375
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_load_factor() == 0.1
unordered_map::size
Conta o número de elementos.
size_type size() const;
Comentários
A função de membro retorna o comprimento da sequência controlada.
Exemplo
// std__unordered_map__unordered_map_size.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// clear the container and reinspect
c1.clear();
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
std::cout << std::endl;
c1.insert(Mymap::value_type('d', 4));
c1.insert(Mymap::value_type('e', 5));
// display contents " [e 5] [d 4]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
size == 0
empty() == true
[e, 5] [d, 4]
size == 2
empty() == false
unordered_map::size_type
O tipo de uma distância não assinada entre dois elementos.
typedef T2 size_type;
Comentários
O tipo inteiro não assinado descreve um objeto que pode representar o comprimento de qualquer sequência controlada. É descrito aqui como sinônimo do tipo definido pela implementação T2.
Exemplo
// std__unordered_map__unordered_map_size_type.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
Mymap::size_type sz = c1.size();
std::cout << "size == " << sz << std::endl;
return (0);
}
size == 0
unordered_map::swap
Troca o conteúdo de dois contêineres.
void swap(unordered_map& right);
Parâmetros
right
O recipiente com o qual trocar.
Comentários
A função de membro troca as sequências controladas entre *this e right. Se unordered_map::get_allocator() == right.get_allocator(), consulte unordered_map::get_allocator, ele faz isso em tempo constante, ele lança uma exceção apenas como resultado da cópia do objeto de traços armazenados do tipo Tre não invalida referências, ponteiros ou iteradores que designam elementos nas duas sequências controladas. Caso contrário, ele executa atribuições de elementos e chamadas de construtor proporcionais ao número de elementos nas duas sequências controladas.
Exemplo
// std__unordered_map__unordered_map_swap.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
Mymap c2;
c2.insert(Mymap::value_type('d', 4));
c2.insert(Mymap::value_type('e', 5));
c2.insert(Mymap::value_type('f', 6));
c1.swap(c2);
// display contents " [f 6] [e 5] [d 4]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
swap(c1, c2);
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
[f, 6] [e, 5] [d, 4]
[c, 3] [b, 2] [a, 1]
unordered_map::unordered_map
Constrói um objeto de contêiner.
unordered_map(const unordered_map& Right);
explicit unordered_map(
size_type Bucket_count = N0,
const Hash& Hash = Hash(),
const Comp& Comp = Comp(),
const Allocator& Al = Allocator());
unordered_map(unordered_map&& Right);
unordered_map(initializer_list<Type> IList);
unordered_map(initializer_list<Type> IList, size_type Bucket_count);
unordered_map(
initializer_list<Type> IList,
size_type Bucket_count,
const Hash& Hash);
unordered_map(
initializer_list<Type> IList,
size_type Bucket_count,
const Hash& Hash,
KeyEqual& equal);
unordered_map(
initializer_list<Type> IList,
size_type Bucket_count,
const Hash& Hash,
KeyEqual& Equal
const Allocator& Al);
template <class InIt>
unordered_map(
InputIterator First,
InputIterator Last,
size_type Bucket_count = N0,
const Hash& Hash = Hash(),
const Comp& Comp = Comp(),
const Allocator& Al = Alloc());
Parâmetros
Al
O objeto alocador a ser armazenado.
Comp
O objeto de função de comparação a ser armazenado.
Hash
O objeto de função hash a ser armazenado.
Bucket_count
O número mínimo de buckets.
Right
O recipiente a copiar.
First
A posição do primeiro elemento a ser copiado.
Last
A posição logo após o último elemento a ser copiado.
IList
O initializer_list que contém os elementos a serem copiados.
Comentários
O primeiro construtor especifica uma cópia da sequência controlada por right. O segundo construtor especifica uma sequência controlada vazia. O terceiro construtor insere a sequência de valores de elemento [first, last). O quarto construtor especifica uma cópia da sequência movendo right.
Todos os construtores também inicializam vários valores armazenados. Para o construtor copy, os valores são obtidos de Right. Caso contrário:
o número mínimo de buckets é o argumento Bucket_count, se presente; caso contrário, é um valor padrão descrito aqui como o valor definido pela implementação N0.
O objeto da função hash é o argumento Hash, se presente; caso contrário, é Hash().
O objeto da função de comparação é o argumento Comp, se presente; caso contrário, é Pred().
O objeto alocador é o argumento Al, se presente; caso contrário, é Alloc().
Exemplo
// std__unordered_map__unordered_map_construct.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
#include <initializer_list>
using namespace std;
using Mymap = unordered_map<char, int>;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (const auto& c : c1) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
Mymap c2(8,
hash<char>(),
equal_to<char>(),
allocator<pair<const char, int> >());
c2.insert(Mymap::value_type('d', 4));
c2.insert(Mymap::value_type('e', 5));
c2.insert(Mymap::value_type('f', 6));
// display contents " [f 6] [e 5] [d 4]"
for (const auto& c : c2) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
Mymap c3(c1.begin(),
c1.end(),
8,
hash<char>(),
equal_to<char>(),
allocator<pair<const char, int> >());
// display contents " [c 3] [b 2] [a 1]"
for (const auto& c : c3) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
Mymap c4(move(c3));
// display contents " [c 3] [b 2] [a 1]"
for (const auto& c : c4) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
cout << endl;
// Construct with an initializer_list
unordered_map<int, char> c5({ { 5, 'g' }, { 6, 'h' }, { 7, 'i' }, { 8, 'j' } });
for (const auto& c : c5) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
// Initializer_list plus size
unordered_map<int, char> c6({ { 5, 'g' }, { 6, 'h' }, { 7, 'i' }, { 8, 'j' } }, 4);
for (const auto& c : c1) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
cout << endl;
// Initializer_list plus size and hash
unordered_map<int, char, hash<char>> c7(
{ { 5, 'g' }, { 6, 'h' }, { 7, 'i' }, { 8, 'j' } },
4,
hash<char>()
);
for (const auto& c : c1) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
// Initializer_list plus size, hash, and key_equal
unordered_map<int, char, hash<char>, equal_to<char>> c8(
{ { 5, 'g' }, { 6, 'h' }, { 7, 'i' }, { 8, 'j' } },
4,
hash<char>(),
equal_to<char>()
);
for (const auto& c : c1) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
// Initializer_list plus size, hash, key_equal, and allocator
unordered_map<int, char, hash<char>, equal_to<char>> c9(
{ { 5, 'g' }, { 6, 'h' }, { 7, 'i' }, { 8, 'j' } },
4,
hash<char>(),
equal_to<char>(),
allocator<pair<const char, int> >()
);
for (const auto& c : c1) {
cout << " [" << c.first << ", " << c.second << "]";
}
cout << endl;
}
[a, 1] [b, 2] [c, 3]
[d, 4] [e, 5] [f, 6]
[a, 1] [b, 2] [c, 3]
[a, 1] [b, 2] [c, 3]
[5, g] [6, h] [7, i] [8, j]
[a, 1] [b, 2] [c, 3]
[a, 1] [b, 2] [c, 3]
[a, 1] [b, 2] [c, 3]
[a, 1] [b, 2] [c, 3]
unordered_map::value_type
O tipo de um elemento.
typedef std::pair<const Key, Ty> value_type;
Comentários
O tipo descreve um elemento da sequência controlada.
Exemplo
// std__unordered_map__unordered_map_value_type.cpp
// compile with: /EHsc
#include <unordered_map>
#include <iostream>
typedef std::unordered_map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// display contents " [c 3] [b 2] [a 1]"
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
// add a value and reinspect
Mymap::key_type key = 'd';
Mymap::mapped_type mapped = 4;
Mymap::value_type val = Mymap::value_type(key, mapped);
c1.insert(val);
for (Mymap::const_iterator it = c1.begin();
it != c1.end(); ++it)
std::cout << " [" << it->first << ", " << it->second << "]";
std::cout << std::endl;
return (0);
}
[c, 3] [b, 2] [a, 1]
[d, 4] [c, 3] [b, 2] [a, 1]
Ver também
<unordered_map>
segurança de threads na biblioteca padrão C++