hash_multimap (STL/CLR)
A classe do modelo descreve um objeto que controla uma sequência de variar- comprimento de elementos que tenha acesso bidirecional. Você usa o contêiner hash_multimap para gerenciar uma sequência de elementos como uma tabela de hash, cada entrada da tabela para armazenar 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, desde que vai para o passeio.
Na descrição abaixo, GValue é o mesmo que:
Microsoft::VisualC::StlClr::GenericPair<GKey, GMapped>
onde:
GKey é o mesmo que Key a menos que o último é um tipo de referência, nesse caso é Key^
GMapped é o mesmo que Mapped a menos que o último é um tipo de referência, nesse caso é Mapped^
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
Chave
O tipo de componente principal de um elemento na sequência controlada.Mapeado
O tipo de componente adicional de um elemento na sequência controlada.
Membros
Definição de tipo |
Descrição |
---|---|
O tipo de um iterador de constante para a sequência controlada. |
|
O tipo de uma referência constante para um elemento. |
|
O tipo de um iterador invertido constante para a sequência controlada. |
|
O tipo de distância de possivelmente (assinado) entre dois elementos. |
|
O tipo de interface genérica para o contêiner. |
|
O tipo de um iterador para a interface genérica para o contêiner. |
|
O tipo de um iterador de cima para baixo para a interface genérica para o contêiner. |
|
O tipo de um elemento para a interface genérica para o contêiner. |
|
A delegação de hash de uma chave. |
|
O tipo de um iterador para a sequência controlada. |
|
O delegado de ordenação para duas chaves. |
|
O tipo de uma chave classificação. |
|
O tipo do valor mapeado associado a cada chave. |
|
O tipo de uma referência para um elemento. |
|
O tipo de um iterador de cima para baixo para a sequência controlada. |
|
O tipo de distância (não negativo) de entre dois elementos. |
|
O delegado de ordenação para dois valores do elemento. |
|
O tipo de um elemento. |
Função de membro |
Descrição |
---|---|
Designa o início da sequência controlada. |
|
Conta o número de segmentos. |
|
Remove todos os elementos. |
|
Conta os elementos que correspondem a uma chave especificada. |
|
Testa se nenhum elemento estiver presente. |
|
Designa o término da sequência controlada. |
|
Encontra variam que corresponde a uma chave especificada. |
|
Remove os elementos nas posições especificadas. |
|
Localiza um elemento que corresponde a uma chave especificada. |
|
Copia a delegação de hash de uma chave. |
|
Cria um objeto contêiner. |
|
Adiciona os elementos. |
|
Copia o representante de ordenação para duas chaves. |
|
Conta os elementos médio por segmento. |
|
Localiza o início do intervalo que corresponde a uma chave especificada. |
|
Cria um objeto de valor. |
|
Obtém ou define os elementos máximo pelo segmento. |
|
Designa o início da sequência controlada invertida. |
|
Recria a tabela de hash. |
|
Designa o término da sequência controlada invertida. |
|
Conta o número de elementos. |
|
Alterna o conteúdo de dois contêineres. |
|
Copia a sequência controlada a uma nova matriz. |
|
Localiza de extremidade do intervalo que corresponde a uma chave especificada. |
|
Copia o representante de ordenação para dois valores do elemento. |
Operador |
Descrição |
---|---|
Substitui a sequência controlada. |
Interfaces
Interface |
Descrição |
---|---|
Duplica um objeto. |
|
Sequência por meio dos elementos. |
|
Mantenha o grupo de elementos. |
|
Sequência por meio dos elementos digitados. |
|
Mantenha o grupo de elementos de tipo. |
|
IHashKey<, valor> |
Mantenha o contêiner genérico. |
Comentários
O objeto aloca e libera armazenamento para a sequência que controla como nós individuais em uma lista vinculada bidirecional. Para acelerar o acesso, o objeto também mantém uma matriz de variar- comprimento dos ponteiros na lista (a tabela de hash), gerenciando efetivamente a lista inteiro com uma sequência de sublists, ou blocos. Insere os elementos em um segmento que mantém ordenado alterando os links entre nós, nunca copiar o conteúdo de um nó para outro. Isso significa que você pode inserir e remover os elementos livremente sem os outros elementos de perturbação.
O objeto classifica cada partição que controla chamando um objeto armazenado delegado do tipo hash_set::key_compare (STL/CLR). Você pode especificar o objeto armazenado delegado quando você constrói o hash_set; se você não especificar um objeto de delegação, o padrão será a comparação operator<=(key_type, key_type).
Você acessa o objeto armazenado delegado chamando a função de membro hash_set::key_comp (STL/CLR)(). Esse objeto de delegação deve definir o equivalente de ordenação de chaves entre do tipo hash_set::key_type (STL/CLR). Isso significa que, para algumas duas chaves X e Y:
key_comp()(X, Y) retorna o mesmo resultado booliano em cada chamada.
Se key_comp()(X, Y) && key_comp()(Y, X) é true, então X e Y são ditos ter ordenação equivalente.
Qualquer regra de ordenação que se comportar como operator<=(key_type, key_type), operator>=(key_type, key_type)operator==(key_type, key_type) ou define a ordenação eqivalent.
Observe que o contêiner garante que apenas elementos cujas chaves têm a ordenação de equivalente (e quais picam com o mesmo valor inteiro) são adjacentes em um segmento. Ao contrário da classe hash_map (STL/CLR)do modelo, um objeto da classe hash_multimap do modelo não exige que as chaves para todos os elementos são exclusivos. (Dois ou mais chaves podem ter ordenação equivalente.)
O objeto determina qual segmento deve conter uma chave de classificação especificada chamando um objeto armazenado delegado do tipo hash_set::hasher (STL/CLR). Você acessa esse objeto armazenado chamando a função de membro hash_set::hash_delegate (STL/CLR)() para obter um valor inteiro que depende do valor da chave. Você pode especificar o objeto armazenado delegado quando você constrói o hash_set; se você não especificar um objeto de delegação, o padrão será a função System::Object::hash_value(key_type). Isso significa que, para algumas chaves X e Y:
hash_delegate()(X) retorna o mesmo resultado inteiro em cada chamada.
Se X e Y tem a ordenação equivalente, então hash_delegate()(X) deve 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 que a pesquisa, inserir, e a remoção de um elemento com um número arbitrário de operações que é independente do número de elementos na sequência (o tempo constantes) -- pelo menos no melhor dos casos. Além disso, inserindo um elemento não invalida iteradores, e removendo um elemento invalida apenas os iteradores que apontam no elemento removido.
Se os valores com hash não são distribuídos uniformemente, porém, um hash a tabela pode degenerar. Em extremamente -- para uma função de hash que sempre retorna o mesmo valor -- a pesquisa, inserir, e a remoção é proporcional ao número de elementos na sequência (hora lineares). O contêiner esforça-se escolher uma função de hash razoável, um tamanho médio do segmento, e uma tabela de hash (número total de blocos), mas você pode substituir algumas ou todas estas escolhas. Consulte, por exemplo, as funções hash_set::max_load_factor (STL/CLR) e hash_set::rehash (STL/CLR).
Um hash_multimap oferece suporte aos iteradores bidirecionais, o que significa que você pode avançar para os elementos adjacentes um iterador dados que designa um elemento na sequência controlada. Um nó principal especial corresponde ao iterador retornado por hash_multimap::end (STL/CLR)(). Você pode diminuir este iterador para alcançar o elemento o mais recente na sequência controlada, se houver. É possível incrementar um iterador de hash_multimap para alcançar o nó principal, e comparará no igual a end(). Mas você não pode desreferenciar o iterador retornado por end().
Observe que você não pode se referir a um elemento de hash_multimap determinado diretamente a posição numérica -- isso requer um iterador de acesso aleatório.
Um iterador de hash_multimap armazena um identificador para o nó associado de hash_multimap, por sua vez que armazena um identificador para o contêiner associado. Você pode usar iteradores apenas com seus objetos de contêiner associados. Um iterador de hash_multimap permanece válido desde que o nó associado de hash_multimap é associado a um hash_multimap. Além disso, um iterador válido é dereferencable -- você pode usá-lo para acessar ou modificar o valor do elemento que designa -- contanto que não é igual a end().
Apagando ou removendo um elemento chama o destruidor para seu valor armazenado. Destruir o contêiner apaga todos os elementos. Assim, um contêiner cujo tipo de elemento é uma classe de referência garante que nenhum elemento é maior que o contêiner. A observe, entretanto, que manipula um contêiner faz not destrói seus elementos.
Requisitos
cliext </hash_map deCabeçalho: >
cliext deNamespace: