hash_multimap
(STL/CLR)
A classe de modelo descreve um objeto que controla uma sequência de tamanho variável de elementos que têm acesso bidirecional. Você usa o contêiner hash_multimap
para gerenciar uma sequência de elementos como uma tabela de hash, cada entrada de tabela armazenando uma lista vinculada bidirecional de nós e cada nó armazenando um elemento. Um elemento consiste em uma chave para ordenar a sequência e um valor mapeado que acompanha o trajeto.
Na descrição abaixo, GValue
é o mesmo que:
Microsoft::VisualC::StlClr::GenericPair<GKey, GMapped>
em que:
GKey
é o mesmo que Key
, a menos que o último seja um tipo ref, caso em que é Key^
GMapped
é o mesmo que Mapped
, a menos que o último seja um tipo ref, caso em que é Mapped^
Sintaxe
template<typename Key,
typename Mapped>
ref class hash_multimap
: public
System::ICloneable,
System::Collections::IEnumerable,
System::Collections::ICollection,
System::Collections::Generic::IEnumerable<GValue>,
System::Collections::Generic::ICollection<GValue>,
System::Collections::Generic::IList<GValue>,
Microsoft::VisualC::StlClr::IHash<Gkey, GValue>
{ ..... };
Parâmetros
Key
O tipo do componente de chave de um elemento na sequência controlada.
Mapped
O tipo do outro componente de um elemento na sequência controlada.
Requisitos
Cabeçalho:<cliext/hash_map>
Namespace: cliext
Declarações
Definição do tipo | Descrição |
---|---|
hash_multimap::const_iterator |
O tipo de um iterador de constante para a sequência controlada. |
hash_multimap::const_reference |
O tipo de uma referência de constante para um elemento. |
hash_multimap::const_reverse_iterator |
O tipo de um iterador reverso de constante para a sequência controlada. |
hash_multimap::difference_type |
O tipo de uma distância (possivelmente com sinal) entre dois elementos. |
hash_multimap::generic_container |
O tipo da interface genérica para o contêiner. |
hash_multimap::generic_iterator |
O tipo de um iterador da interface genérica para o contêiner. |
hash_multimap::generic_reverse_iterator |
O tipo de um iterador reverso da interface genérica para o contêiner. |
hash_multimap::generic_value |
O tipo de um elemento da interface genérica para o contêiner. |
hash_multimap::hasher |
O delegado de hash de uma chave. |
hash_multimap::iterator |
O tipo de um iterador para a sequência controlada. |
hash_multimap::key_compare |
O delegado de ordenação para duas chaves. |
hash_multimap::key_type |
O tipo de uma chave de classificação. |
hash_multimap::mapped_type |
O tipo do valor mapeado associado a cada chave. |
hash_multimap::reference |
O tipo de uma referência para um elemento. |
hash_multimap::reverse_iterator |
O tipo de um iterador inverso para a sequência controlada. |
hash_multimap::size_type |
O tipo de uma distância (não negativa) entre dois elementos. |
hash_multimap::value_compare |
O delegado de ordenação para dois valores de elemento. |
hash_multimap::value_type |
O tipo de um elemento. |
Função de membro | Descrição |
---|---|
hash_multimap::begin |
Designa o início da sequência controlada. |
hash_multimap::bucket_count |
Conta o número de buckets. |
hash_multimap::clear |
Remove todos os elementos. |
hash_multimap::count |
Conta os elementos que correspondem a uma chave especificada. |
hash_multimap::empty |
Testa se nenhum elemento está presente. |
hash_multimap::end |
Designa o fim da sequência controlada. |
hash_multimap::equal_range |
Localiza o intervalo que corresponde a uma chave especificada. |
hash_multimap::erase |
Remove os elementos em posições especificadas. |
hash_multimap::find |
Localiza um elemento que corresponde a uma chave especificada. |
hash_multimap::hash_delegate |
Copia o delegado de hash de uma chave. |
hash_multimap::hash_multimap |
Constrói um objeto contêiner. |
hash_multimap::insert |
Adiciona elementos. |
hash_multimap::key_comp |
Copia o delegado de ordenação de duas chaves. |
hash_multimap::load_factor |
Conta a média de elementos por bucket. |
hash_multimap::lower_bound |
Localiza o início do intervalo que corresponde a uma chave especificada. |
hash_multimap::make_value |
Constrói um objeto de valor. |
hash_multimap::max_load_factor |
Obtém ou define o máximo de elementos por bucket. |
hash_multimap::rbegin |
Designa o início da sequência controlada invertida. |
hash_multimap::rehash |
Recria a tabela de hash. |
hash_multimap::rend |
Designa o fim da sequência controlada invertida. |
hash_multimap::size |
Conta o número de elementos. |
hash_multimap::swap |
Alterna o conteúdo de dois contêineres. |
hash_multimap::to_array |
Copia a sequência controlada para uma nova matriz. |
hash_multimap::upper_bound |
Localiza fim do intervalo que corresponde a uma chave especificada. |
hash_multimap::value_comp |
Copia o delegado de ordenação para dois valores de elemento. |
Operador | Descrição |
---|---|
hash_multimap::operator= |
Substitui a sequência controlada. |
Interfaces
Interface | Descrição |
---|---|
ICloneable | Duplica um objeto. |
IEnumerable | Sequencie por meio de elementos. |
ICollection | Mantenha grupo de elementos. |
IEnumerable<T> | Sequencie por meio de elementos de tipo. |
ICollection<T> | Manter grupo de elementos tipados. |
IHash<Key, Value> |
Manter contêiner genérico. |
Comentários
O objeto aloca e libera o armazenamento para a sequência que ele controla como nós individuais em uma lista vinculada bidirecional. Para acelerar o acesso, o objeto também mantém uma matriz de ponteiros de comprimento variado na lista (a tabela de hash), gerenciando efetivamente toda a lista como uma sequência de sublistas ou buckets. Ele insere elementos em um bucket que mantém ordenado alterando os links entre nós, nunca copiando o conteúdo de um nó para outro. Isso significa que você pode inserir e remover elementos livremente sem prejudicar os demais elementos.
O objeto ordena cada bucket que controla chamando um objeto delegado armazenado do tipo hash_set::key_compare
. Você pode especificar o objeto delegado armazenado ao construir o hash_set; se especificar nenhum objeto delegado, o padrão será a comparação operator<=(key_type, key_type)
.
Você acessa o objeto delegado armazenado chamando a função hash_set::key_comp
de membro . Esse objeto delegado deve definir a ordenação equivalente entre chaves do tipo hash_set::key_type
. Isso significa que, para duas chaves X
e Y
quaisquer:
key_comp()(X, Y)
retorna o mesmo resultado booliano em cada chamada.
Se key_comp()(X, Y) && key_comp()(Y, X)
for verdadeiro, então X
e Y
terão ordenação equivalente.
Qualquer regra de ordenação que se comporte como operator<=(key_type, key_type)
, operator>=(key_type, key_type)
ou operator==(key_type, key_type)
defina ordenação equivalente.
O contêiner garante apenas que os elementos cujas chaves tenham ordenação equivalente (e quais hash para o mesmo valor inteiro) sejam adjacentes em um bucket. Ao contrário da classe hash_map
de modelo (STL/CLR), um objeto da classe hash_multimap
de modelo não exige que as chaves de todos os elementos sejam exclusivas. (Duas ou mais chaves podem ter ordenação equivalente.)
O objeto determina qual bucket deve conter uma determinada chave de ordenação chamando um objeto delegado armazenado do tipo hash_set::hasher
. Você acessa esse objeto armazenado chamando a função hash_set::hash_delegate
membro para obter um valor inteiro que depende do valor da chave. Você pode especificar o objeto delegado armazenado ao construir o hash_set; se não especificar nenhum objeto delegado, o padrão será a função System::Object::hash_value(key_type)
. Isso significa que para qualquer chave X
e Y
:
hash_delegate()(X)
retorna o mesmo resultado inteiro em cada chamada.
Se X
e Y
tiverem ordenação equivalente, hash_delegate()(X)
deverá retornar o mesmo resultado inteiro que hash_delegate()(Y)
.
Cada elemento contém uma chave separada e um valor mapeado. A sequência é representada de forma a permitir a pesquisa, inserção e remoção de um elemento arbitrário em tempo constante. Ou seja, o número de operações é independente do número de elementos na sequência, pelo menos no melhor dos casos. Além disso, Inserir um elemento não invalida iteradores, e remover um elemento invalida apenas os iteradores que apontam o elemento removido.
No entanto, se os valores de hash não forem distribuídos uniformemente, uma tabela de hash poderá degenerar. No extremo (para uma função hash que sempre retorna o mesmo valor), a pesquisa, a inserção e a remoção são proporcionais ao número de elementos na sequência (tempo linear). O contêiner busca escolher uma função de hash, um tamanho médio do bucket e um tamanho da tabela de hash (número total de buckets) razoáveis, mas você pode substituir qualquer uma dessas opções. Veja, por exemplo, as funções hash_set::max_load_factor
e hash_set::rehash
.
A hash_multimap
dá suporte a iteradores bidirecionais, o que significa que você pode passar para elementos adjacentes com um iterador que designa um elemento na sequência controlada. Um nó de cabeçalho especial corresponde ao iterador retornado por end()
. É possível decrementar esse iterador para alcançar o último elemento na sequência controlada, se presente. Você pode incrementar um hash_multimap
iterador para alcançar o nó principal e, em seguida, ele será comparado a end()
. Mas você não pode desreferenciar o iterador retornado por end()
.
Você não pode se referir a um hash_multimap
elemento diretamente, dada sua posição numérica. Isso requer um iterador de acesso aleatório.
Um hash_multimap
iterador armazena um identificador em seu nó associado hash_multimap
, que, por sua vez, armazena um identificador em seu contêiner associado. Você somente pode usar iteradores com seus objetos de contêiner associados. Um hash_multimap
iterador permanece válido desde que seu nó associado hash_multimap
esteja associado a algum hash_multimap
. Além disso, um iterador válido é desreferenciável. Você pode usá-lo para acessar ou alterar o valor do elemento que ele designa, desde que não seja igual a end()
.
Apagar ou remover um elemento chama o destruidor para o valor armazenado. Destruir o contêiner apaga todos os elementos. Portanto, um contêiner cujo tipo de elemento é uma classe ref garante que nenhum elemento sobreviva ao contêiner. No entanto, um contêiner de alças não destrói seus elementos.
Membros
hash_multimap::começar
Designa o início da sequência controlada.
Sintaxe
iterator begin();
Comentários
A função membro retorna um iterador bidirecional que designa o primeiro elemento da sequência controlada ou logo após o final de uma sequência vazia. Use-o para obter um iterador que designa o início current
da sequência controlada, mas seu status poderá mudar se o tamanho da sequência controlada for alterado.
Exemplo
// cliext_hash_multimap_begin.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect first two items
Myhash_multimap::iterator it = c1.begin();
System::Console::WriteLine("*begin() = [{0} {1}]",
it->first, it->second);
++it;
System::Console::WriteLine("*++begin() = [{0} {1}]",
it->first, it->second);
return (0);
}
[a 1] [b 2] [c 3]
*begin() = [a 1]
*++begin() = [b 2]
hash_multimap::bucket_count
Conta o número de buckets.
Sintaxe
int bucket_count();
Comentários
A função membro retorna o número atual de buckets. Use-a para determinar o tamanho da tabela de hash.
Exemplo
// cliext_hash_multimap_bucket_count.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1 = gcnew Myhash_multimap;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect current parameters
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
System::Console::WriteLine();
// change max_load_factor and redisplay
c1.max_load_factor(0.25f);
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
System::Console::WriteLine();
// rehash and redisplay
c1.rehash(100);
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
return (0);
}
[a 1] [b 2] [c 3]
bucket_count() = 16
load_factor() = 0.1875
max_load_factor() = 4
bucket_count() = 16
load_factor() = 0.1875
max_load_factor() = 0.25
bucket_count() = 128
load_factor() = 0.0234375
max_load_factor() = 0.25
hash_multimap::Limpar
Remove todos os elementos.
Sintaxe
void clear();
Comentários
A função membro chama efetivamente erase(begin(), end())
. Use para garantir que a sequência controlada esteja vazia.
Exemplo
// cliext_hash_multimap_clear.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
// display contents " [a 1] [b 2]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
return (0);
}
[a 1] [b 2] [c 3]
size() = 0
[a 1] [b 2]
size() = 0
hash_multimap::const_iterator
O tipo de um iterador de constante para a sequência controlada.
Sintaxe
typedef T2 const_iterator;
Comentários
O tipo descreve um objeto de tipo não especificado T2
que pode servir como um iterador bidirecional constante para a sequência controlada.
Exemplo
// cliext_hash_multimap_const_iterator.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
Myhash_multimap::const_iterator cit = c1.begin();
for (; cit != c1.end(); ++cit)
System::Console::Write("[{0} {1}] ", cit->first, cit->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
hash_multimap::const_reference
O tipo de uma referência de constante para um elemento.
Sintaxe
typedef value_type% const_reference;
Comentários
O tipo descreve uma referência de constante para um elemento.
Exemplo
// cliext_hash_multimap_const_reference.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
Myhash_multimap::const_iterator cit = c1.begin();
for (; cit != c1.end(); ++cit)
{ // get a const reference to an element
Myhash_multimap::const_reference cref = *cit;
System::Console::Write("[{0} {1}] ", cref->first, cref->second);
}
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
hash_multimap::const_reverse_iterator
O tipo de um iterador reverso de constante para a sequência controlada.
Sintaxe
typedef T4 const_reverse_iterator;
Comentários
O tipo descreve um objeto de tipo não especificado T4
que pode servir como um iterador reverso de constante para a sequência controlada.
Exemplo
// cliext_hash_multimap_const_reverse_iterator.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" reversed
Myhash_multimap::const_reverse_iterator crit = c1.rbegin();
for (; crit != c1.rend(); ++crit)
System::Console::Write("[{0} {1}] ", crit->first, crit->second);
System::Console::WriteLine();
return (0);
}
[c 3] [b 2] [a 1]
hash_multimap::count
Localiza o número de elementos que correspondem a uma chave especificada.
Sintaxe
size_type count(key_type key);
Parâmetros
key
O valor chave a ser pesquisado.
Comentários
A função membro retorna o número de elementos na sequência controlada que têm ordenação equivalente com key
. Usado para determinar o número de elementos que estão na sequência controlada no momento e que correspondem a uma chave especificada.
Exemplo
// cliext_hash_multimap_count.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("count(L'A') = {0}", c1.count(L'A'));
System::Console::WriteLine("count(L'b') = {0}", c1.count(L'b'));
System::Console::WriteLine("count(L'C') = {0}", c1.count(L'C'));
return (0);
}
[a 1] [b 2] [c 3]
count(L'A') = 0
count(L'b') = 1
count(L'C') = 0
hash_multimap::d tipo_de_diferenciação
Os tipos de uma distância com sinal entre dois elementos.
Sintaxe
typedef int difference_type;
Comentários
O tipo descreve uma contagem de elementos possivelmente negativa.
Exemplo
// cliext_hash_multimap_difference_type.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// compute positive difference
Myhash_multimap::difference_type diff = 0;
for (Myhash_multimap::iterator it = c1.begin(); it != c1.end(); ++it)
++diff;
System::Console::WriteLine("end()-begin() = {0}", diff);
// compute negative difference
diff = 0;
for (Myhash_multimap::iterator it = c1.end(); it != c1.begin(); --it)
--diff;
System::Console::WriteLine("begin()-end() = {0}", diff);
return (0);
}
[a 1] [b 2] [c 3]
end()-begin() = 3
begin()-end() = -3
hash_multimap::vazio
Testa se nenhum elemento está presente.
Sintaxe
bool empty();
Comentários
A função membro retorna verdadeiro para uma sequência controlada vazia. É equivalente a size() == 0
. Você o usa para testar se o hash_multimap
está vazio.
Exemplo
// cliext_hash_multimap_empty.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("size() = {0}", c1.size());
System::Console::WriteLine("empty() = {0}", c1.empty());
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
System::Console::WriteLine("empty() = {0}", c1.empty());
return (0);
}
[a 1] [b 2] [c 3]
size() = 3
empty() = False
size() = 0
empty() = True
hash_multimap::fim
Designa o fim da sequência controlada.
Sintaxe
iterator end();
Comentários
A função membro retorna um iterador bidirecional que aponta para logo após o fim da sequência controlada. Você o usa para obter um iterador que designa o final da sequência controlada; Seu status não será alterado se o comprimento da sequência controlada for alterado.
Exemplo
// cliext_hash_multimap_end.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect last two items
Myhash_multimap::iterator it = c1.end();
--it;
--it;
System::Console::WriteLine("*-- --end() = [{0} {1}]",
it->first, it->second);
++it;
System::Console::WriteLine("*--end() = [{0} {1}]",
it->first, it->second);
return (0);
}
[a 1] [b 2] [c 3]
*-- --end() = [b 2]
*--end() = [c 3]
hash_multimap::equal_range
Localiza o intervalo que corresponde a uma chave especificada.
Sintaxe
cliext::pair<iterator, iterator> equal_range(key_type key);
Parâmetros
key
O valor chave a ser pesquisado.
Comentários
A função membro retorna um par de iteradores cliext::pair<iterator, iterator>(lower_bound(key), upper_bound(key))
. Use-a para determinar o intervalo de elementos que estão atualmente na sequência controlada e que correspondem a uma chave especificada.
Exemplo
// cliext_hash_multimap_equal_range.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
typedef Myhash_multimap::pair_iter_iter Pairii;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// display results of failed search
Pairii pair1 = c1.equal_range(L'x');
System::Console::WriteLine("equal_range(L'x') empty = {0}",
pair1.first == pair1.second);
// display results of successful search
pair1 = c1.equal_range(L'b');
for (; pair1.first != pair1.second; ++pair1.first)
System::Console::Write("[{0} {1}] ",
pair1.first->first, pair1.first->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
equal_range(L'x') empty = True
[b 2]
hash_multimap::apagar
Remove os elementos em posições especificadas.
Sintaxe
iterator erase(iterator where);
iterator erase(iterator first, iterator last);
bool erase(key_type key)
Parâmetros
first
Início do intervalo a ser apagado.
key
O valor da chave a ser apagada.
last
Fim do intervalo a ser apagado.
where
Elemento a ser apagado.
Comentários
A primeira função membro remove o elemento da sequência controlada apontada por where
, e retorna um iterador que designa o primeiro elemento restante além do elemento removido ou end()
se esse elemento não existir. Use para remover apenas um elemento.
A segunda função membro remove os elementos da sequência controlada no intervalo [first, last)
semiaberto e retorna um iterador que designa o primeiro elemento restante além de quaisquer elementos removidos ou end()
se esse elemento não existir. Use para remover zero ou mais elementos contíguos.
A terceira função membro remove qualquer elemento da sequência controlada cuja chave tenha ordenação equivalente a key
, e retorna uma contagem do número de elementos removidos. Use-a para remover e contar todos os elementos que correspondem a uma chave especificada.
Cada apagamento de elemento leva tempo proporcional ao logaritmo do número de elementos na sequência controlada.
Exemplo
// cliext_hash_multimap_erase.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
cliext::hash_multimap<wchar_t, int> c1;
c1.insert(cliext::hash_multimap<wchar_t, int>::make_value(L'a', 1));
c1.insert(cliext::hash_multimap<wchar_t, int>::make_value(L'b', 2));
c1.insert(cliext::hash_multimap<wchar_t, int>::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (cliext::hash_multimap<wchar_t, int>::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// erase an element and reinspect
cliext::hash_multimap<wchar_t, int>::iterator it =
c1.erase(c1.begin());
System::Console::WriteLine("erase(begin()) = [{0} {1}]",
it->first, it->second);
// add elements and display " b c d e"
c1.insert(cliext::hash_multimap<wchar_t, int>::make_value(L'd', 4));
c1.insert(cliext::hash_multimap<wchar_t, int>::make_value(L'e', 5));
for each (cliext::hash_multimap<wchar_t, int>::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// erase all but end
it = c1.end();
it = c1.erase(c1.begin(), --it);
System::Console::WriteLine("erase(begin(), end()-1) = [{0} {1}]",
it->first, it->second);
System::Console::WriteLine("size() = {0}", c1.size());
// erase end
System::Console::WriteLine("erase(L'x') = {0}", c1.erase(L'x'));
System::Console::WriteLine("erase(L'e') = {0}", c1.erase(L'e'));
return (0);
}
[a 1] [b 2] [c 3]
erase(begin()) = [b 2]
[b 2] [c 3] [d 4] [e 5]
erase(begin(), end()-1) = [e 5]
size() = 1
erase(L'x') = 0
erase(L'e') = 1
hash_multimap::find
Localiza um elemento que corresponde a uma chave especificada.
Sintaxe
iterator find(key_type key);
Parâmetros
key
O valor chave a ser pesquisado.
Comentários
Se pelo menos um elemento na sequência controlada tiver uma ordenação equivalente com key
, a função membro retornará um iterador designando um desses elementos; caso contrário, ela retornará hash_multimap::end
()
. Use-a para localizar um elemento que está atualmente na sequência controlada e que corresponde a uma chave especificada.
Exemplo
// cliext_hash_multimap_find.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("find {0} = {1}",
L'A', c1.find(L'A') != c1.end());
Myhash_multimap::iterator it = c1.find(L'b');
System::Console::WriteLine("find {0} = [{1} {2}]",
L'b', it->first, it->second);
System::Console::WriteLine("find {0} = {1}",
L'C', c1.find(L'C') != c1.end());
return (0);
}
[a 1] [b 2] [c 3]
find A = False
find b = [b 2]
find C = False
hash_multimap::generic_container
O tipo da interface genérica para o contêiner.
Sintaxe
typedef Microsoft::VisualC::StlClr::
IHash<GKey, GValue>
generic_container;
Comentários
O tipo descreve a interface genérica para essa classe de contêiner de modelo.
Exemplo
// cliext_hash_multimap_generic_container.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct a generic container
Myhash_multimap::generic_container^ gc1 = %c1;
for each (Myhash_multimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// modify generic and display original
gc1->insert(Myhash_multimap::make_value(L'd', 4));
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// modify original and display generic
c1.insert(Myhash_multimap::make_value(L'e', 5));
for each (Myhash_multimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3] [d 4]
[a 1] [b 2] [c 3] [d 4] [e 5]
hash_multimap::generic_iterator
O tipo de um iterador a ser usado com a interface genérica do contêiner.
Sintaxe
typedef Microsoft::VisualC::StlClr::Generic::
ContainerBidirectionalIterator<generic_value>
generic_iterator;
Comentários
O tipo descreve um iterador genérico que pode ser usado com a interface genérica para essa classe de contêiner de modelo.
Exemplo
// cliext_hash_multimap_generic_iterator.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct a generic container
Myhash_multimap::generic_container^ gc1 = %c1;
for each (Myhash_multimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// get an element and display it
Myhash_multimap::generic_iterator gcit = gc1->begin();
Myhash_multimap::generic_value gcval = *gcit;
System::Console::Write("[{0} {1}] ", gcval->first, gcval->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[a 1]
hash_multimap::generic_reverse_iterator
O tipo de um iterador reverso a ser usado com a interface genérica para o contêiner.
Sintaxe
typedef Microsoft::VisualC::StlClr::Generic::
ReverseRandomAccessIterator<generic_value>
generic_reverse_iterator;
Comentários
O tipo descreve um iterador reverso genérico que pode ser usado com a interface genérica para essa classe de contêiner de modelo.
Exemplo
// cliext_hash_multimap_generic_reverse_iterator.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct a generic container
Myhash_multimap::generic_container^ gc1 = %c1;
for each (Myhash_multimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// get an element and display it
Myhash_multimap::generic_reverse_iterator gcit = gc1->rbegin();
Myhash_multimap::generic_value gcval = *gcit;
System::Console::WriteLine("[{0} {1}] ", gcval->first, gcval->second);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[c 3]
hash_multimap::generic_value
O tipo de um elemento para uso com a interface genérica do contêiner.
Sintaxe
typedef GValue generic_value;
Comentários
O tipo descreve um objeto de tipo GValue
que mostra o valor do elemento armazenado a ser usado com a interface genérica para essa classe de contêiner de modelo.
Exemplo
// cliext_hash_multimap_generic_value.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct a generic container
Myhash_multimap::generic_container^ gc1 = %c1;
for each (Myhash_multimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// get an element and display it
Myhash_multimap::generic_iterator gcit = gc1->begin();
Myhash_multimap::generic_value gcval = *gcit;
System::Console::WriteLine("[{0} {1}] ", gcval->first, gcval->second);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[a 1]
hash_multimap::hash_delegate
Localiza um elemento que corresponde a uma chave especificada.
Sintaxe
hasher^ hash_delegate();
Comentários
A função membro retorna o delegado usado para converter um valor de chave em um inteiro. Use-a para fazer hash de uma chave.
Exemplo
// cliext_hash_multimap_hash_delegate.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
Myhash_multimap::hasher^ myhash = c1.hash_delegate();
System::Console::WriteLine("hash(L'a') = {0}", myhash(L'a'));
System::Console::WriteLine("hash(L'b') = {0}", myhash(L'b'));
return (0);
}
hash(L'a') = 1616896120
hash(L'b') = 570892832
hash_multimap::hash_multimap
Constrói um objeto contêiner.
Sintaxe
hash_multimap();
explicit hash_multimap(key_compare^ pred);
hash_multimap(key_compare^ pred, hasher^ hashfn);
hash_multimap(hash_multimap<Key, Mapped>% right);
hash_multimap(hash_multimap<Key, Mapped>^ right);
template<typename InIter>
hash_multimaphash_multimap(InIter first, InIter last);
template<typename InIter>
hash_multimap(InIter first, InIter last,
key_compare^ pred);
template<typename InIter>
hash_multimap(InIter first, InIter last,
key_compare^ pred, hasher^ hashfn);
hash_multimap(System::Collections::Generic::IEnumerable<GValue>^ right);
hash_multimap(System::Collections::Generic::IEnumerable<GValue>^ right,
key_compare^ pred);
hash_multimap(System::Collections::Generic::IEnumerable<GValue>^ right,
key_compare^ pred, hasher^ hashfn);
Parâmetros
first
Início do intervalo a ser inserido.
hashfn
Função de hash para mapear chaves para buckets.
last
Fim do intervalo a ser inserido.
pred
Predicado de ordenação para a sequência controlada.
right
Objeto ou intervalo a inserir.
Comentários
O construtor:
hash_multimap();
inicializa a sequência controlada sem elementos, com o predicado de ordenação padrão key_compare()
e com a função de hash padrão. Use-o para especificar uma sequência controlada inicial vazia, com o a função de hash e o predicado de ordenação padrão.
O construtor:
explicit hash_multimap(key_compare^ pred);
inicializa a sequência controlada sem elementos, com o predicado pred
de ordenação e com a função de hash padrão. Use-o para especificar uma sequência controlada inicial vazia, com o predicado de ordenação especificado e a função de hash padrão.
O construtor:
hash_multimap(key_compare^ pred, hasher^ hashfn);
inicializa a sequência controlada sem elementos, com o predicado pred
de ordenação e com a função hashfn
hash . Use-o para especificar uma sequência controlada inicial vazia, com o predicado de ordenação e a função de hash especificados.
O construtor:
hash_multimap(hash_multimap<Key, Mapped>% right);
inicializa a sequência controlada com a sequência [right.begin()
, right.end()
), com o predicado de ordenação padrão e com a função de hash padrão. Você o usa para especificar uma sequência controlada inicial que é uma cópia da sequência controlada pelo hash_multimap
objeto right
, com o predicado de ordenação padrão e a função de hash.
O construtor:
hash_multimap(hash_multimap<Key, Mapped>^ right);
inicializa a sequência controlada com a sequência [right->begin()
, right->end()
), com o predicado de ordenação padrão e com a função de hash padrão. Você o usa para especificar uma sequência controlada inicial que é uma cópia da sequência controlada pelo hash_multimap
objeto right
, com o predicado de ordenação padrão e a função de hash.
O construtor:
template<typename InIter> hash_multimap(InIter first, InIter last);
inicializa a sequência controlada com a sequência [first, last)
, com o predicado de ordenação padrão e com a função hash padrão. Use-o para tornar a sequência controlada uma cópia de outra sequência, com o predicado de ordenação padrão e a função de hash.
O construtor:
template<typename InIter> hash_multimap(InIter first, InIter last, key_compare^ pred);
inicializa a sequência controlada com a sequência [first, last)
, com o predicado pred
de ordenação e com a função de hash padrão. Use-o para tornar a sequência controlada uma cópia de outra sequência, com o predicado de ordenação especificado e a função de hash padrão.
O construtor:
template<typename InIter> hash_multimap(InIter first, InIter last, key_compare^ pred, hasher^ hashfn);
inicializa a sequência controlada com a sequência [first, last)
, com o predicado pred
de ordenação e com a função hashfn
hash . Use-o para tornar a sequência controlada uma cópia de outra sequência, com a função de hash e o predicado de ordenação especificados.
O construtor:
hash_multimap(System::Collections::Generic::IEnumerable<Key>^ right);
inicializa a sequência controlada com a sequência designada pelo enumerador right
, com o predicado de ordenação padrão e com a função hash padrão. Use-o para tornar a sequência controlada uma cópia de outra sequência descrita por um enumerador, com a função de hash e o predicado de ordenação padrão.
O construtor:
hash_multimap(System::Collections::Generic::IEnumerable<Key>^ right, key_compare^ pred);
inicializa a sequência controlada com a sequência designada pelo enumerador right
, com o predicado pred
de ordenação e com a função de hash padrão. Use-o para tornar a sequência controlada uma cópia de outra sequência descrita por um enumerador, com o predicado de ordenação especificado e a função de hash padrão.
O construtor:
hash_multimap(System::Collections::Generic::IEnumerable<Key>^ right, key_compare^ pred, hasher^ hashfn);
inicializa a sequência controlada com a sequência designada pelo enumerador right
, com o predicado pred
de ordenação e com a função hashfn
hash . Use-o para tornar a sequência controlada uma cópia de outra sequência descrita por um enumerador, com o predicado de ordenação especificado e a função de hash.
Exemplo
// cliext_hash_multimap_construct.cpp
// compile with: /clr
#include <cliext/hash_map>
int myfun(wchar_t key)
{ // hash a key
return (key ^ 0xdeadbeef);
}
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
// construct an empty container
Myhash_multimap c1;
System::Console::WriteLine("size() = {0}", c1.size());
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an ordering rule
Myhash_multimap c2 = cliext::greater_equal<wchar_t>();
System::Console::WriteLine("size() = {0}", c2.size());
c2.insert(c1.begin(), c1.end());
for each (Myhash_multimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an ordering rule and hash function
Myhash_multimap c2h(cliext::greater_equal<wchar_t>(),
gcnew Myhash_multimap::hasher(&myfun));
System::Console::WriteLine("size() = {0}", c2h.size());
c2h.insert(c1.begin(), c1.end());
for each (Myhash_multimap::value_type elem in c2h)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine();
// construct with an iterator range
Myhash_multimap c3(c1.begin(), c1.end());
for each (Myhash_multimap::value_type elem in c3)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an iterator range and an ordering rule
Myhash_multimap c4(c1.begin(), c1.end(),
cliext::greater_equal<wchar_t>());
for each (Myhash_multimap::value_type elem in c4)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an iterator range and an ordering rule and hash function
Myhash_multimap c4h(c1.begin(), c1.end(),
cliext::greater_equal<wchar_t>(),
gcnew Myhash_multimap::hasher(&myfun));
for each (Myhash_multimap::value_type elem in c4h)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine();
// construct with an enumeration
Myhash_multimap c5( // NOTE: cast is not needed
(System::Collections::Generic::IEnumerable<
Myhash_multimap::value_type>^)%c3);
for each (Myhash_multimap::value_type elem in c5)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an enumeration and an ordering rule
Myhash_multimap c6( // NOTE: cast is not needed
(System::Collections::Generic::IEnumerable<
Myhash_multimap::value_type>^)%c3,
cliext::greater_equal<wchar_t>());
for each (Myhash_multimap::value_type elem in c6)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an enumeration and an ordering rule and hash function
Myhash_multimap c6h( // NOTE: cast is not needed
(System::Collections::Generic::IEnumerable<
Myhash_multimap::value_type>^)%c3,
cliext::greater_equal<wchar_t>(),
gcnew Myhash_multimap::hasher(&myfun));
for each (Myhash_multimap::value_type elem in c6h)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine();
// construct by copying another container
Myhash_multimap c7(c4);
for each (Myhash_multimap::value_type elem in c7)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct by copying a container handle
Myhash_multimap c8(%c3);
for each (Myhash_multimap::value_type elem in c8)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
size() = 0
[a 1] [b 2] [c 3]
size() = 0
[a 1] [b 2] [c 3]
size() = 0
[c 3] [b 2] [a 1]
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[c 3] [b 2] [a 1]
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[c 3] [b 2] [a 1]
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
hash_multimap::hasher
O delegado de hash de uma chave.
Sintaxe
Microsoft::VisualC::StlClr::UnaryDelegate<GKey, int>
hasher;
Comentários
O tipo descreve um delegado que converte um valor de chave em um inteiro.
Exemplo
// cliext_hash_multimap_hasher.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
Myhash_multimap::hasher^ myhash = c1.hash_delegate();
System::Console::WriteLine("hash(L'a') = {0}", myhash(L'a'));
System::Console::WriteLine("hash(L'b') = {0}", myhash(L'b'));
return (0);
}
hash(L'a') = 1616896120
hash(L'b') = 570892832
hash_multimap::insert
Adiciona elementos.
Sintaxe
iterator insert(value_type val);
iterator insert(iterator where, value_type val);
template<typename InIter>
void insert(InIter first, InIter last);
void insert(System::Collections::Generic::IEnumerable<value_type>^ right);
Parâmetros
first
Início do intervalo a ser inserido.
last
Fim do intervalo a ser inserido.
right
Enumeração a ser inserida.
val
Valor da chave a ser inserido.
where
Em que parte do contêiner inserir (somente uma dica).
Comentários
Cada uma das funções membro insere uma sequência especificada pelos operandos restantes.
A primeira função membro insere um elemento com value val
e retorna um iterador que designa o elemento recém-inserido. Use para inserir um único elemento.
A segunda função membro insere um elemento com value val
, usando where
como dica (para melhorar o desempenho) e retorna um iterador que designa o elemento recém-inserido. Você o usa para inserir um único elemento que pode estar ao lado de um elemento que você conhece.
A terceira função membro insere a sequência [first, last)
. Use-a para inserir zero ou mais elementos copiados de outra sequência.
A quarta função membro insere a sequência designada pelo right
. Use-a para inserir uma sequência descrita por um enumerador.
Cada inserção de elemento leva um tempo proporcional ao logaritmo do número de elementos na sequência controlada. A inserção pode ocorrer em tempo constante amortizado, no entanto, dada uma dica que designa um elemento próximo ao ponto de inserção.
Exemplo
// cliext_hash_multimap_insert.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// insert a single value, unique and duplicate
Myhash_multimap::iterator it =
c1.insert(Myhash_multimap::make_value(L'x', 24));
System::Console::WriteLine("insert([L'x' 24]) = [{0} {1}]",
it->first, it->second);
it = c1.insert(Myhash_multimap::make_value(L'b', 2));
System::Console::WriteLine("insert([L'b' 2]) = [{0} {1}]",
it->first, it->second);
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// insert a single value with hint
it = c1.insert(c1.begin(), Myhash_multimap::make_value(L'y', 25));
System::Console::WriteLine("insert(begin(), [L'y' 25]) = [{0} {1}]",
it->first, it->second);
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// insert an iterator range
Myhash_multimap c2;
it = c1.end();
c2.insert(c1.begin(), --it);
for each (Myhash_multimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// insert an enumeration
Myhash_multimap c3;
c3.insert( // NOTE: cast is not needed
(System::Collections::Generic::
IEnumerable<Myhash_multimap::value_type>^)%c1);
for each (Myhash_multimap::value_type elem in c3)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
insert([L'x' 24]) = [x 24]
insert([L'b' 2]) = [b 2]
[a 1] [b 2] [b 2] [c 3] [x 24]
insert(begin(), [L'y' 25]) = [y 25]
[a 1] [b 2] [b 2] [c 3] [x 24] [y 25]
[a 1] [b 2] [b 2] [c 3] [x 24]
[a 1] [b 2] [b 2] [c 3] [x 24] [y 25]
hash_multimap::iterator
O tipo de um iterador para a sequência controlada.
Sintaxe
typedef T1 iterator;
Comentários
O tipo descreve um objeto de tipo não especificado T1
que pode servir como um iterador bidirecional para a sequência controlada.
Exemplo
// cliext_hash_multimap_iterator.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
Myhash_multimap::iterator it = c1.begin();
for (; it != c1.end(); ++it)
System::Console::Write("[{0} {1}] ", it->first, it->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
hash_multimap::key_comp
Copia o delegado de ordenação de duas chaves.
Sintaxe
key_compare^key_comp();
Comentários
A função membro retorna o delegado de ordenação usado para ordenar a sequência controlada. Use-o para comparar duas chaves.
Exemplo
// cliext_hash_multimap_key_comp.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
Myhash_multimap::key_compare^ kcomp = c1.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
System::Console::WriteLine();
// test a different ordering rule
Myhash_multimap c2 = cliext::greater<wchar_t>();
kcomp = c2.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
return (0);
}
compare(L'a', L'a') = True
compare(L'a', L'b') = True
compare(L'b', L'a') = False
compare(L'a', L'a') = False
compare(L'a', L'b') = False
compare(L'b', L'a') = True
hash_multimap::key_compare
O delegado de ordenação para duas chaves.
Sintaxe
Microsoft::VisualC::StlClr::BinaryDelegate<GKey, GKey, bool>
key_compare;
Comentários
O tipo é um sinônimo do delegado que determina a ordenação dos respectivos argumentos de chave.
Exemplo
// cliext_hash_multimap_key_compare.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
Myhash_multimap::key_compare^ kcomp = c1.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
System::Console::WriteLine();
// test a different ordering rule
Myhash_multimap c2 = cliext::greater<wchar_t>();
kcomp = c2.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
return (0);
}
compare(L'a', L'a') = True
compare(L'a', L'b') = True
compare(L'b', L'a') = False
compare(L'a', L'a') = False
compare(L'a', L'b') = False
compare(L'b', L'a') = True
hash_multimap::key_type
O tipo de uma chave de classificação.
Sintaxe
typedef Key key_type;
Comentários
O tipo é um sinônimo do parâmetro de modeloKey
.
Exemplo
// cliext_hash_multimap_key_type.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" using key_type
for (Myhash_multimap::iterator it = c1.begin(); it != c1.end(); ++it)
{ // store element in key_type object
Myhash_multimap::key_type val = it->first;
System::Console::Write("{0} ", val);
}
System::Console::WriteLine();
return (0);
}
a b c
hash_multimap::load_factor
Conta a média de elementos por bucket.
Sintaxe
float load_factor();
Comentários
A função membro retorna (float)size() / bucket_count()
. Use-a para determinar o tamanho médio do bucket.
Exemplo
// cliext_hash_multimap_load_factor.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1 = gcnew Myhash_multimap;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect current parameters
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
System::Console::WriteLine();
// change max_load_factor and redisplay
c1.max_load_factor(0.25f);
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
System::Console::WriteLine();
// rehash and redisplay
c1.rehash(100);
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
return (0);
}
[a 1] [b 2] [c 3]
bucket_count() = 16
load_factor() = 0.1875
max_load_factor() = 4
bucket_count() = 16
load_factor() = 0.1875
max_load_factor() = 0.25
bucket_count() = 128
load_factor() = 0.0234375
max_load_factor() = 0.25
hash_multimap::lower_bound
Localiza o início do intervalo que corresponde a uma chave especificada.
Sintaxe
iterator lower_bound(key_type key);
Parâmetros
key
O valor chave a ser pesquisado.
Comentários
A função membro determina o primeiro elemento X
na sequência controlada que faz hash para o mesmo bucket key
e tem uma ordenação equivalente a key
. Se esse elemento não existir, ele retornará hash_multimap::end
()
; caso contrário, ele retornará um iterador que designa X
. Use-a para localizar o início de uma sequência de elementos contidos atualmente na sequência controlada e que corresponde a uma chave especificada.
Exemplo
// cliext_hash_multimap_lower_bound.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("lower_bound(L'x')==end() = {0}",
c1.lower_bound(L'x') == c1.end());
Myhash_multimap::iterator it = c1.lower_bound(L'a');
System::Console::WriteLine("*lower_bound(L'a') = [{0} {1}]",
it->first, it->second);
it = c1.lower_bound(L'b');
System::Console::WriteLine("*lower_bound(L'b') = [{0} {1}]",
it->first, it->second);
return (0);
}
[a 1] [b 2] [c 3]
lower_bound(L'x')==end() = True
*lower_bound(L'a') = [a 1]
*lower_bound(L'b') = [b 2]
hash_multimap::make_value
Constrói um objeto de valor.
Sintaxe
static value_type make_value(key_type key, mapped_type mapped);
Parâmetros
key
Valor da chave a ser usada.
mapped
Valor mapeado a ser pesquisado.
Comentários
A função membro retorna um value_type
objeto cuja chave é key
e cujo valor mapeado é mapped
. Use-a para compor um objeto adequado para uso com várias outras funções membro.
Exemplo
// cliext_hash_multimap_make_value.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
hash_multimap::mapped_type
O tipo de um valor mapeado associado a cada chave.
Sintaxe
typedef Mapped mapped_type;
Comentários
O tipo é um sinônimo do parâmetro de modeloMapped
.
Exemplo
// cliext_hash_multimap_mapped_type.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" using mapped_type
for (Myhash_multimap::iterator it = c1.begin(); it != c1.end(); ++it)
{ // store element in mapped_type object
Myhash_multimap::mapped_type val = it->second;
System::Console::Write("{0} ", val);
}
System::Console::WriteLine();
return (0);
}
1 2 3
hash_multimap::max_load_factor
Obtém ou define o máximo de elementos por bucket.
Sintaxe
float max_load_factor();
void max_load_factor(float new_factor);
Parâmetros
new_factor
Novo fator de carga máxima a ser armazenado.
Comentários
A primeira função membro retorna o fator de carga máxima armazenada. Use-a para determinar o tamanho máximo médio do bucket.
A segunda função de membro substitui o fator de carga máxima de armazenamento por new_factor
. Nenhuma rehash automático ocorre até uma inserção subsequente.
Exemplo
// cliext_hash_multimap_max_load_factor.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1 = gcnew Myhash_multimap;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect current parameters
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
System::Console::WriteLine();
// change max_load_factor and redisplay
c1.max_load_factor(0.25f);
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
System::Console::WriteLine();
// rehash and redisplay
c1.rehash(100);
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
return (0);
}
[a 1] [b 2] [c 3]
bucket_count() = 16
load_factor() = 0.1875
max_load_factor() = 4
bucket_count() = 16
load_factor() = 0.1875
max_load_factor() = 0.25
bucket_count() = 128
load_factor() = 0.0234375
max_load_factor() = 0.25
hash_multimap::operator=
Substitui a sequência controlada.
Sintaxe
hash_multimap<Key, Mapped>% operator=(hash_multimap<Key, Mapped>% right);
Parâmetros
right
O contêiner a ser copiado.
Comentários
O operador membro copia right
para o objeto e retorna *this
. Você pode usá-lo para substituir a sequência controlada por uma cópia da sequência controlada em right
.
Exemplo
// cliext_hash_multimap_operator_as.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// assign to a new container
Myhash_multimap c2;
c2 = c1;
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
hash_multimap::rbegin
Designa o início da sequência controlada invertida.
Sintaxe
reverse_iterator rbegin();
Comentários
A função membro retorna um iterador reverso que designa o último elemento da sequência controlada ou logo após o início de uma sequência vazia. Portanto, ele designa o beginning
da sequência invertida. Use-o para obter um iterador que designa o início current
da sequência controlada que é vista na ordem inversa, mas seu status poderá mudar se o tamanho da sequência controlada for alterado.
Exemplo
// cliext_hash_multimap_rbegin.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect first two items in reversed sequence
Myhash_multimap::reverse_iterator rit = c1.rbegin();
System::Console::WriteLine("*rbegin() = [{0} {1}]",
rit->first, rit->second);
++rit;
System::Console::WriteLine("*++rbegin() = [{0} {1}]",
rit->first, rit->second);
return (0);
}
[a 1] [b 2] [c 3]
*rbegin() = [c 3]
*++rbegin() = [b 2]
hash_multimap::reference
O tipo de uma referência para um elemento.
Sintaxe
typedef value_type% reference;
Comentários
O tipo descreve uma referência a um elemento.
Exemplo
// cliext_hash_multimap_reference.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
Myhash_multimap::iterator it = c1.begin();
for (; it != c1.end(); ++it)
{ // get a reference to an element
Myhash_multimap::reference ref = *it;
System::Console::Write("[{0} {1}] ", ref->first, ref->second);
}
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
hash_multimap::rehash
Recria a tabela de hash.
Sintaxe
void rehash();
Comentários
A função membro recria a tabela de hash, garantindo que load_factor() <= max_load_factor()
o . Caso contrário, a tabela de hash aumentará de tamanho somente conforme necessário após uma inserção. (Ele nunca diminui de tamanho automaticamente). Você a usa para ajustar o tamanho da tabela de hash.
Exemplo
// cliext_hash_multimap_rehash.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1 = gcnew Myhash_multimap;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect current parameters
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
System::Console::WriteLine();
// change max_load_factor and redisplay
c1.max_load_factor(0.25f);
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
System::Console::WriteLine();
// rehash and redisplay
c1.rehash(100);
System::Console::WriteLine("bucket_count() = {0}", c1.bucket_count());
System::Console::WriteLine("load_factor() = {0}", c1.load_factor());
System::Console::WriteLine("max_load_factor() = {0}",
c1.max_load_factor());
return (0);
}
[a 1] [b 2] [c 3]
bucket_count() = 16
load_factor() = 0.1875
max_load_factor() = 4
bucket_count() = 16
load_factor() = 0.1875
max_load_factor() = 0.25
bucket_count() = 128
load_factor() = 0.0234375
max_load_factor() = 0.25
hash_multimap::rend
Designa o fim da sequência controlada invertida.
Sintaxe
reverse_iterator rend();
Comentários
A função membro retorna um iterador reverso que aponta para logo após o início da sequência controlada. Portanto, ele designa o end
da sequência invertida. Use-o para obter um iterador que designa o fim current
da sequência controlada vista na ordem inversa, mas seu status poderá mudar se o tamanho da sequência controlada for alterado.
Exemplo
// cliext_hash_multimap_rend.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect first two items in reversed sequence
Myhash_multimap::reverse_iterator rit = c1.rend();
--rit;
--rit;
System::Console::WriteLine("*-- --rend() = [{0} {1}]",
rit->first, rit->second);
++rit;
System::Console::WriteLine("*--rend() = [{0} {1}]",
rit->first, rit->second);
return (0);
}
[a 1] [b 2] [c 3]
*-- --rend() = [b 2]
*--rend() = [a 1]
hash_multimap::reverse_iterator
O tipo de um iterador inverso para a sequência controlada.
Sintaxe
typedef T3 reverse_iterator;
Comentários
O tipo descreve um objeto de tipo T3
não especificado que pode servir como um iterador reverso para a sequência controlada.
Exemplo
// cliext_hash_multimap_reverse_iterator.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" reversed
Myhash_multimap::reverse_iterator rit = c1.rbegin();
for (; rit != c1.rend(); ++rit)
System::Console::Write("[{0} {1}] ", rit->first, rit->second);
System::Console::WriteLine();
return (0);
}
[c 3] [b 2] [a 1]
hash_multimap::size
Conta o número de elementos.
Sintaxe
size_type size();
Comentários
A função membro retorna o comprimento da sequência controlada. Use para determinar o número de elementos que estão na sequência controlada no momento. Se tudo o que importa é se a sequência tem tamanho diferente de zero, consulte hash_multimap::empty
()
.
Exemplo
// cliext_hash_multimap_size.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0} after clearing", c1.size());
// add elements and clear again
c1.insert(Myhash_multimap::make_value(L'd', 4));
c1.insert(Myhash_multimap::make_value(L'e', 5));
System::Console::WriteLine("size() = {0} after adding 2", c1.size());
return (0);
}
[a 1] [b 2] [c 3]
size() = 0 after clearing
size() = 2 after adding 2
hash_multimap::size_type
O tipo de uma distância com sinal entre dois elementos.
Sintaxe
typedef int size_type;
Comentários
O tipo descreve uma contagem de elementos não negativos.
Exemplo
// cliext_hash_multimap_size_type.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// compute positive difference
Myhash_multimap::size_type diff = 0;
for (Myhash_multimap::iterator it = c1.begin(); it != c1.end(); ++it)
++diff;
System::Console::WriteLine("end()-begin() = {0}", diff);
return (0);
}
[a 1] [b 2] [c 3]
end()-begin() = 3
hash_multimap::swap
Alterna o conteúdo de dois contêineres.
Sintaxe
void swap(hash_multimap<Key, Mapped>% right);
Parâmetros
right
Contêiner com o qual trocar conteúdos.
Comentários
A função membro troca as sequências controladas entre this
e right
. É feito em um tempo constante e não gera exceções. Use como uma maneira rápida de trocar o conteúdo entre dois contêineres.
Exemplo
// cliext_hash_multimap_swap.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct another container with repetition of values
Myhash_multimap c2;
c2.insert(Myhash_multimap::make_value(L'd', 4));
c2.insert(Myhash_multimap::make_value(L'e', 5));
c2.insert(Myhash_multimap::make_value(L'f', 6));
for each (Myhash_multimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// swap and redisplay
c1.swap(c2);
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
for each (Myhash_multimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
[d 4] [e 5] [f 6]
[d 4] [e 5] [f 6]
[a 1] [b 2] [c 3]
hash_multimap::to_array
Copia a sequência controlada para uma nova matriz.
Sintaxe
cli::array<value_type>^ to_array();
Comentários
A função membro retorna uma matriz que contém a sequência controlada. Use para obter uma cópia da sequência controlada em formato de matriz.
Exemplo
// cliext_hash_multimap_to_array.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// copy the container and modify it
cli::array<Myhash_multimap::value_type>^ a1 = c1.to_array();
c1.insert(Myhash_multimap::make_value(L'd', 4));
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// display the earlier array copy
for each (Myhash_multimap::value_type elem in a1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3] [d 4]
[a 1] [b 2] [c 3]
hash_multimap::upper_bound
Localiza fim do intervalo que corresponde a uma chave especificada.
Sintaxe
iterator upper_bound(key_type key);
Parâmetros
key
O valor chave a ser pesquisado.
Comentários
A função membro determina o último elemento X
na sequência controlada que faz hash para o mesmo bucket key
e tem uma ordenação equivalente a key
. Se esse elemento não existir, ou se X
for o último elemento na sequência controlada, ele retornará hash_multimap::end
()
; caso contrário, ele retornará um iterador que designa o primeiro elemento além de X
. Use para localizar o fim de uma sequência de elementos que estão na sequência controlada no momento e que correspondem a uma chave especificada.
Exemplo
// cliext_hash_multimap_upper_bound.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Myhash_multimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("upper_bound(L'x')==end() = {0}",
c1.upper_bound(L'x') == c1.end());
Myhash_multimap::iterator it = c1.upper_bound(L'a');
System::Console::WriteLine("*upper_bound(L'a') = [{0} {1}]",
it->first, it->second);
it = c1.upper_bound(L'b');
System::Console::WriteLine("*upper_bound(L'b') = [{0} {1}]",
it->first, it->second);
return (0);
}
[a 1] [b 2] [c 3]
upper_bound(L'x')==end() = True
*upper_bound(L'a') = [b 2]
*upper_bound(L'b') = [c 3]
hash_multimap::value_comp
Copia o delegado de ordenação para dois valores de elemento.
Sintaxe
value_compare^ value_comp();
Comentários
A função membro retorna o delegado de ordenação usado para ordenar a sequência controlada. Use-a para comparar dois valores de elemento.
Exemplo
// cliext_hash_multimap_value_comp.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_map<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
Myhash_multimap::value_compare^ kcomp = c1.value_comp();
System::Console::WriteLine("compare([L'a', 1], [L'a', 1]) = {0}",
kcomp(Myhash_multimap::make_value(L'a', 1),
Myhash_multimap::make_value(L'a', 1)));
System::Console::WriteLine("compare([L'a', 1], [L'b', 2]) = {0}",
kcomp(Myhash_multimap::make_value(L'a', 1),
Myhash_multimap::make_value(L'b', 2)));
System::Console::WriteLine("compare([L'b', 2], [L'a', 1]) = {0}",
kcomp(Myhash_multimap::make_value(L'b', 2),
Myhash_multimap::make_value(L'a', 1)));
System::Console::WriteLine();
return (0);
}
compare([L'a', 1], [L'a', 1]) = True
compare([L'a', 1], [L'b', 2]) = True
compare([L'b', 2], [L'a', 1]) = False
hash_multimap::value_compare
O delegado de ordenação para dois valores de elemento.
Sintaxe
Microsoft::VisualC::StlClr::BinaryDelegate<generic_value, generic_value, bool>
value_compare;
Comentários
O tipo é um sinônimo do delegado que determina a ordenação dos argumentos de valor dessa sequência.
Exemplo
// cliext_hash_multimap_value_compare.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_map<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
Myhash_multimap::value_compare^ kcomp = c1.value_comp();
System::Console::WriteLine("compare([L'a', 1], [L'a', 1]) = {0}",
kcomp(Myhash_multimap::make_value(L'a', 1),
Myhash_multimap::make_value(L'a', 1)));
System::Console::WriteLine("compare([L'a', 1], [L'b', 2]) = {0}",
kcomp(Myhash_multimap::make_value(L'a', 1),
Myhash_multimap::make_value(L'b', 2)));
System::Console::WriteLine("compare([L'b', 2], [L'a', 1]) = {0}",
kcomp(Myhash_multimap::make_value(L'b', 2),
Myhash_multimap::make_value(L'a', 1)));
System::Console::WriteLine();
return (0);
}
compare([L'a', 1], [L'a', 1]) = True
compare([L'a', 1], [L'b', 2]) = True
compare([L'b', 2], [L'a', 1]) = False
hash_multimap::value_type
O tipo de um elemento.
Sintaxe
typedef generic_value value_type;
Comentários
O tipo é um sinônimo de generic_value
.
Exemplo
// cliext_hash_multimap_value_type.cpp
// compile with: /clr
#include <cliext/hash_map>
typedef cliext::hash_multimap<wchar_t, int> Myhash_multimap;
int main()
{
Myhash_multimap c1;
c1.insert(Myhash_multimap::make_value(L'a', 1));
c1.insert(Myhash_multimap::make_value(L'b', 2));
c1.insert(Myhash_multimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" using value_type
for (Myhash_multimap::iterator it = c1.begin(); it != c1.end(); ++it)
{ // store element in value_type object
Myhash_multimap::value_type val = *it;
System::Console::Write("[{0} {1}] ", val->first, val->second);
}
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]