hash_multiset (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_multiset 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. O valor de cada elemento é usado como uma chave para ordenar a sequência.

Na descrição abaixo, é o mesmo que , que por sua vez é o mesmo GKeyKey que a menos que o último seja um tipo ref, GValue caso em que é Key^.

Sintaxe

template<typename Key>
    ref class hash_multiset
        :   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.

Requisitos

Cabeçalho:<cliext/hash_set>

Namespace:cliext

Declarações

Definição do tipo Descrição
hash_multiset::const_iterator O tipo de um iterador de constante para a sequência controlada.
hash_multiset::const_reference O tipo de uma referência de constante para um elemento.
hash_multiset::const_reverse_iterator O tipo de um iterador reverso de constante para a sequência controlada.
hash_multiset::difference_type O tipo de uma distância (possivelmente com sinal) entre dois elementos.
hash_multiset::generic_container O tipo da interface genérica para o contêiner.
hash_multiset::generic_iterator O tipo de um iterador da interface genérica para o contêiner.
hash_multiset::generic_reverse_iterator O tipo de um iterador reverso da interface genérica para o contêiner.
hash_multiset::generic_value O tipo de um elemento da interface genérica para o contêiner.
hash_multiset::hasher O delegado de hash de uma chave.
hash_multiset::iterator O tipo de um iterador para a sequência controlada.
hash_multiset::key_compare O delegado de ordenação para duas chaves.
hash_multiset::key_type O tipo de uma chave de classificação.
hash_multiset::reference O tipo de uma referência para um elemento.
hash_multiset::reverse_iterator O tipo de um iterador inverso para a sequência controlada.
hash_multiset::size_type O tipo de uma distância (não negativa) entre dois elementos.
hash_multiset::value_compare O delegado de ordenação para dois valores de elemento.
hash_multiset::value_type O tipo de um elemento.
Função de membro Descrição
hash_multiset::begin Designa o início da sequência controlada.
hash_multiset::bucket_count Conta o número de buckets.
hash_multiset::clear Remove todos os elementos.
hash_multiset::count Conta os elementos que correspondem a uma chave especificada.
hash_multiset::empty Testa se nenhum elemento está presente.
hash_multiset::end Designa o fim da sequência controlada.
hash_multiset::equal_range Localiza o intervalo que corresponde a uma chave especificada.
hash_multiset::erase Remove os elementos em posições especificadas.
hash_multiset::find Localiza um elemento que corresponde a uma chave especificada.
hash_multiset::hash_delegate Copia o delegado de hash de uma chave.
hash_multiset::hash_multiset Constrói um objeto contêiner.
hash_multiset::insert Adiciona elementos.
hash_multiset::key_comp Copia o delegado de ordenação de duas chaves.
hash_multiset::load_factor Conta a média de elementos por bucket.
hash_multiset::lower_bound Localiza o início do intervalo que corresponde a uma chave especificada.
hash_multiset::make_value Constrói um objeto de valor.
hash_multiset::max_load_factor Obtém ou define o máximo de elementos por bucket.
hash_multiset::rbegin Designa o início da sequência controlada invertida.
hash_multiset::rehash Recria a tabela de hash.
hash_multiset::rend Designa o fim da sequência controlada invertida.
hash_multiset::size Conta o número de elementos.
hash_multiset::swap Alterna o conteúdo de dois contêineres.
hash_multiset::to_array Copia a sequência controlada para uma nova matriz.
hash_multiset::upper_bound Localiza fim do intervalo que corresponde a uma chave especificada.
hash_multiset::value_comp Copia o delegado de ordenação para dois valores de elemento.
Operador Descrição
hash_multiset::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_compde membro . Esse objeto delegado deve definir uma ordem 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 têm ordem equivalente (e qual hash para o mesmo valor inteiro) sejam adjacentes dentro de um bucket. Ao contrário da classe de modelo (STL/CLR), um objeto de classe hash_multisethash_set de modelo não requer que as chaves para 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 de 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 serve como uma chave e um valor. 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 na melhor das hipóteses. 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 com hash não forem distribuídos uniformemente, uma tabela de hash poderá degenerar. No extremo (para uma função de hash que sempre retorna o mesmo valor), pesquisa, inserção e 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_multiset suporta iteradores bidirecionais, o que significa que você pode passar para elementos adjacentes dado um iterador que designa um elemento na sequência controlada. Um nó de cabeçalho especial corresponde ao iterador retornado pelo hash_multiset::end. É possível decrementar esse iterador para alcançar o último elemento na sequência controlada, se presente. Você pode incrementar um hash_multiset iterador para alcançar o nó principal e, em seguida, ele será comparado igual a end(). Mas você não pode desreferenciar o iterador retornado pelo end().

Você não pode se referir a um hash_multiset elemento diretamente dada sua posição numérica. Isso requer um iterador de acesso aleatório.

Um hash_multiset iterador armazena um identificador para seu nó associado, que por sua vez armazena um identificador para seu contêiner associado hash_multiset . Você somente pode usar iteradores com seus objetos de contêiner associados. Um hash_multiset iterador permanece válido enquanto seu nó associado estiver associado hash_multiset a algum hash_multisetarquivo . Além disso, um iterador válido é desreferente. 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 recipiente de alças não destrói seus elementos.

Membros

hash_multiset::begin

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_multiset_begin.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // inspect first two items
    Myhash_multiset::iterator it = c1.begin();
    System::Console::WriteLine("*begin() = {0}", *it);
    System::Console::WriteLine("*++begin() = {0}", *++it);
    return (0);
    }
a b c
*begin() = a
*++begin() = b

hash_multiset::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_multiset_bucket_count.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    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 b c
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_multiset::clear

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_multiset_clear.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // clear the container and reinspect
    c1.clear();
    System::Console::WriteLine("size() = {0}", c1.size());

    // add elements and clear again
    c1.insert(L'a');
    c1.insert(L'b');

    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    c1.clear();
    System::Console::WriteLine("size() = {0}", c1.size());
    return (0);
    }
a b c
size() = 0
a b
size() = 0

hash_multiset::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_multiset_const_iterator.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c"
    Myhash_multiset::const_iterator cit = c1.begin();
    for (; cit != c1.end(); ++cit)
        System::Console::Write("{0} ", *cit);
    System::Console::WriteLine();
    return (0);
    }
a b c

hash_multiset::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_multiset_const_reference.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    Myhash_multiset::const_iterator cit = c1.begin();
    for (; cit != c1.end(); ++cit)
        {   // get a const reference to an element
        Myhash_multiset::const_reference cref = *cit;
        System::Console::Write("{0} ", cref);
        }
    System::Console::WriteLine();
    return (0);
    }
a b c

hash_multiset::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_multiset_const_reverse_iterator.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c" reversed
    Myhash_multiset::const_reverse_iterator crit = c1.rbegin();
    for (; crit != c1.rend(); ++crit)
        System::Console::Write("{0} ", *crit);
    System::Console::WriteLine();
    return (0);
    }
c b a

hash_multiset::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 de membro retorna o número de elementos na sequência controlada que têm ordem 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_multiset_count.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    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 b c
count(L'A') = 0
count(L'b') = 1
count(L'C') = 0

hash_multiset::difference_type

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_multiset_difference_type.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // compute positive difference
    Myhash_multiset::difference_type diff = 0;
    for (Myhash_multiset::iterator it = c1.begin(); it != c1.end(); ++it)
        ++diff;
    System::Console::WriteLine("end()-begin() = {0}", diff);

    // compute negative difference
    diff = 0;
    for (Myhash_multiset::iterator it = c1.end(); it != c1.begin(); --it)
        --diff;
    System::Console::WriteLine("begin()-end() = {0}", diff);
    return (0);
    }
a b c
end()-begin() = 3
begin()-end() = -3

hash_multiset::empty

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ê pode usá-lo para testar se o hash_multiset está vazio.

Exemplo

// cliext_hash_multiset_empty.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    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 b c
size() = 3
empty() = False
size() = 0
empty() = True

hash_multiset::end

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ê pode usá-lo 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_multiset_end.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // inspect last two items
    Myhash_multiset::iterator it = c1.end();
    --it;
    System::Console::WriteLine("*-- --end() = {0}", *--it);
    System::Console::WriteLine("*--end() = {0}", *++it);
    return (0);
    }
a b c
*-- --end() = b
*--end() = c

hash_multiset::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_multiset_equal_range.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
typedef Myhash_multiset::pair_iter_iter Pairii;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    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} ", *pair1.first);
    System::Console::WriteLine();
    return (0);
    }
a b c
equal_range(L'x') empty = True
b

hash_multiset::erase

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 função de primeiro 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 tal elemento não existir. Use para remover apenas um elemento.

A segunda função de membro remove os elementos da sequência controlada no intervalo [first, ) e retorna um iterador que designa o primeiro elemento que permanece além de quaisquer elementos removidos, lastou end() se tal elemento não existir. Use para remover zero ou mais elementos contíguos.

A função de terceiro membro remove qualquer elemento da sequência controlada cuja chave tem ordem 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_multiset_erase.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // erase an element and reinspect
    System::Console::WriteLine("erase(begin()) = {0}",
        *c1.erase(c1.begin()));

    // add elements and display " b c d e"
    c1.insert(L'd');
    c1.insert(L'e');
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // erase all but end
    Myhash_multiset::iterator it = c1.end();
    System::Console::WriteLine("erase(begin(), end()-1) = {0}",
        *c1.erase(c1.begin(), --it));
    System::Console::WriteLine("size() = {0}", c1.size());
    return (0);
    }
a b c
erase(begin()) = b
b c d e
erase(begin(), end()-1) = e
size() = 1

hash_multiset::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 tem ordem equivalente com key, a função de membro retorna um iterador designando um desses elementos, caso contrário, ele retorna end(). Use-a para localizar um elemento que está atualmente na sequência controlada e que corresponde a uma chave especificada.

Exemplo

// cliext_hash_multiset_find.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    System::Console::WriteLine("find {0} = {1}",
        L'A', c1.find(L'A') != c1.end());
    System::Console::WriteLine("find {0} = {1}",
        L'b', *c1.find(L'b'));
    System::Console::WriteLine("find {0} = {1}",
        L'C', c1.find(L'C') != c1.end());
    return (0);
    }
a b c
find A = False
find b = b
find C = False

hash_multiset::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_multiset_generic_container.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct a generic container
    Myhash_multiset::generic_container^ gc1 = %c1;
    for each (wchar_t elem in gc1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // modify generic and display original
    gc1->insert(L'd');
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // modify original and display generic
    c1.insert(L'e');
    for each (wchar_t elem in gc1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
a b c
a b c
a b c d
a b c d e

hash_multiset::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_multiset_generic_iterator.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct a generic container
    Myhash_multiset::generic_container^ gc1 = %c1;
    for each (wchar_t elem in gc1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // get an element and display it
    Myhash_multiset::generic_iterator gcit = gc1->begin();
    Myhash_multiset::generic_value gcval = *gcit;
    System::Console::WriteLine("{0} ", gcval);
    return (0);
    }
a b c
a b c
a

hash_multiset::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_multiset_generic_reverse_iterator.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct a generic container
    Myhash_multiset::generic_container^ gc1 = %c1;
    for each (wchar_t elem in gc1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // get an element and display it
    Myhash_multiset::generic_reverse_iterator gcit = gc1->rbegin();
    Myhash_multiset::generic_value gcval = *gcit;
    System::Console::WriteLine("{0} ", gcval);
    return (0);
    }
a b c
a b c
c

hash_multiset::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_multiset_generic_value.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct a generic container
    Myhash_multiset::generic_container^ gc1 = %c1;
    for each (wchar_t elem in gc1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // get an element and display it
    Myhash_multiset::generic_iterator gcit = gc1->begin();
    Myhash_multiset::generic_value gcval = *gcit;
    System::Console::WriteLine("{0} ", gcval);
    return (0);
    }
a b c
a b c
a

hash_multiset::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_multiset_hash_delegate.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    Myhash_multiset::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_multiset::hash_multiset

Constrói um objeto contêiner.

Sintaxe

hash_multiset();
explicit hash_multiset(key_compare^ pred);
hash_multiset(key_compare^ pred, hasher^ hashfn);
hash_multiset(hash_multiset<Key>% right);
hash_multiset(hash_multiset<Key>^ right);
template<typename InIter>
    hash_multiset(InIter first, InIter last);
template<typename InIter>
    hash_multiset(InIter first, InIter last,
        key_compare^ pred);
template<typename InIter>
    hash_multiset(InIter first, InIter last,
        key_compare^ pred, hasher^ hashfn);
hash_multiset(System::Collections::Generic::IEnumerable<GValue>^ right);
hash_multiset(System::Collections::Generic::IEnumerable<GValue>^ right,
    key_compare^ pred);
hash_multiset(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_multiset();

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_multiset(key_compare^ pred);

inicializa a sequência controlada sem elementos, com o predicado predde 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_multiset(key_compare^ pred, hasher^ hashfn);

inicializa a sequência controlada sem elementos, com o predicado predde ordenação e com a função hashfnde 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_multiset(hash_multiset<Key>% 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ê pode usá-lo para especificar uma sequência controlada inicial que é uma cópia da sequência controlada pelo hash_multiset objeto right, com o predicado de ordenação padrão e a função de hash.

O construtor:

hash_multiset(hash_multiset<Key>^ 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ê pode usá-lo para especificar uma sequência controlada inicial que é uma cópia da sequência controlada pelo hash_multiset objeto right, com o predicado de ordenação padrão e a função de hash.

O construtor:

template<typename InIter> hash_multiset(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 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 padrão e a função de hash.

O construtor:

template<typename InIter> hash_multiset(InIter first, InIter last, key_compare^ pred);

inicializa a sequência controlada com a sequência [first, last), com o predicado de ordenação prede 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_multiset(InIter first, InIter last, key_compare^ pred, hasher^ hashfn);

inicializa a sequência controlada com a sequência [first, last), com o predicado de ordenação prede com a função hashfnde 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_multiset(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 de 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_multiset(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 predde 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_multiset(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 predde ordenação , e com a função hashfnde 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_multiset_construct.cpp
// compile with: /clr
#include <cliext/hash_set>

int myfun(wchar_t key)
    { // hash a key
    return (key ^ 0xdeadbeef);
    }

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
// construct an empty container
    Myhash_multiset c1;
    System::Console::WriteLine("size() = {0}", c1.size());

    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an ordering rule
    Myhash_multiset c2 = cliext::greater_equal<wchar_t>();
    System::Console::WriteLine("size() = {0}", c2.size());

    c2.insert(c1.begin(), c1.end());
    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an ordering rule and hash function
    Myhash_multiset c2h(cliext::greater_equal<wchar_t>(),
        gcnew Myhash_multiset::hasher(&myfun));
    System::Console::WriteLine("size() = {0}", c2h.size());

    c2h.insert(c1.begin(), c1.end());
    for each (wchar_t elem in c2h)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    System::Console::WriteLine();

    // construct with an iterator range
    Myhash_multiset c3(c1.begin(), c1.end());
    for each (wchar_t elem in c3)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an iterator range and an ordering rule
    Myhash_multiset c4(c1.begin(), c1.end(),
        cliext::greater_equal<wchar_t>());
    for each (wchar_t elem in c4)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an iterator range and an ordering rule and hash function
    Myhash_multiset c4h(c1.begin(), c1.end(),
        cliext::greater_equal<wchar_t>(),
        gcnew Myhash_multiset::hasher(&myfun));
    for each (wchar_t elem in c4h)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    System::Console::WriteLine();

    // construct with an enumeration
    Myhash_multiset c5(   // NOTE: cast is not needed
        (System::Collections::Generic::IEnumerable<wchar_t>^)%c3);
    for each (wchar_t elem in c5)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an enumeration and an ordering rule
    Myhash_multiset c6(   // NOTE: cast is not needed
        (System::Collections::Generic::IEnumerable<wchar_t>^)%c3,
            cliext::greater_equal<wchar_t>());
    for each (wchar_t elem in c6)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an enumeration and an ordering rule and hash function
    Myhash_multiset c6h(   // NOTE: cast is not needed
        (System::Collections::Generic::IEnumerable<wchar_t>^)%c3,
            cliext::greater_equal<wchar_t>(),
                gcnew Myhash_multiset::hasher(&myfun));
    for each (wchar_t elem in c6h)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    System::Console::WriteLine();

    // construct from a generic container
    Myhash_multiset c7(c4);
    for each (wchar_t elem in c7)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct by copying another container
    Myhash_multiset c8(%c3);
    for each (wchar_t elem in c8)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
size() = 0
a b c
size() = 0
a b c
size() = 0
c b a

a b c
a b c
c b a

a b c
a b c
c b a

a b c
a b c

hash_multiset::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_multiset_hasher.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    Myhash_multiset::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_multiset::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 de membro insere um elemento com valor vale retorna um iterador que designa o elemento recém-inserido. Use para inserir um único elemento.

A segunda função de membro insere um elemento com valor val, usando where como uma dica (para melhorar o desempenho), e retorna um iterador que designa o elemento recém-inserido. Você pode usá-lo 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 função de quarto 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_multiset_insert.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // insert a single value, unique and duplicate
    System::Console::WriteLine("insert(L'x') = {0}",
        *c1.insert(L'x'));

    System::Console::WriteLine("insert(L'b') = {0}",
        *c1.insert(L'b'));

    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // insert a single value with hint
    System::Console::WriteLine("insert(begin(), L'y') = {0}",
        *c1.insert(c1.begin(), L'y'));
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // insert an iterator range
    Myhash_multiset c2;
    Myhash_multiset::iterator it = c1.end();
    c2.insert(c1.begin(), --it);
    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // insert an enumeration
    Myhash_multiset c3;
    c3.insert(   // NOTE: cast is not needed
        (System::Collections::Generic::IEnumerable<wchar_t>^)%c1);
    for each (wchar_t elem in c3)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
a b c
insert(L'x') = x
insert(L'b') = b
a b b c x
insert(begin(), L'y') = y
a b b c x y
a b b c x
a b b c x y

hash_multiset::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_multiset_iterator.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c"
    Myhash_multiset::iterator it = c1.begin();
    for (; it != c1.end(); ++it)
        System::Console::Write("{0} ", *it);
    System::Console::WriteLine();
    return (0);
    }
a b c

hash_multiset::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_multiset_key_comp.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    Myhash_multiset::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_multiset 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_multiset::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_multiset_key_compare.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    Myhash_multiset::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_multiset 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_multiset::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_multiset_key_type.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c" using key_type
    for (Myhash_multiset::iterator it = c1.begin(); it != c1.end(); ++it)
        {   // store element in key_type object
        Myhash_multiset::key_type val = *it;

        System::Console::Write("{0} ", val);
        }
    System::Console::WriteLine();
    return (0);
    }
a b c

hash_multiset::load_factor

Conta a média de elementos por bucket.

Sintaxe

float load_factor();

Comentários

A função membro retorna (float)size() / count(). Use-a para determinar o tamanho médio do bucket.

Exemplo

// cliext_hash_multiset_load_factor.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    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 b c
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_multiset::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 de membro determina o primeiro elemento X na sequência controlada que faz hash para o mesmo bucket que key e tem ordem equivalente a key. Se esse elemento não existir, ele retornará end(), caso contrário, ele retorna 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_multiset_lower_bound.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    System::Console::WriteLine("lower_bound(L'x')==end() = {0}",
        c1.lower_bound(L'x') == c1.end());

    System::Console::WriteLine("*lower_bound(L'a') = {0}",
        *c1.lower_bound(L'a'));
    System::Console::WriteLine("*lower_bound(L'b') = {0}",
        *c1.lower_bound(L'b'));
    return (0);
    }
a b c
lower_bound(L'x')==end() = True
*lower_bound(L'a') = a
*lower_bound(L'b') = b

hash_multiset::make_value

Constrói um objeto de valor.

Sintaxe

static value_type make_value(key_type key);

Parâmetros

key
Valor da chave a ser usada.

Comentários

A função de membro retorna um value_type objeto cuja chave é key. Use-a para compor um objeto adequado para uso com várias outras funções membro.

Exemplo

// cliext_hash_multiset_make_value.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(Myhash_multiset::make_value(L'a'));
    c1.insert(Myhash_multiset::make_value(L'b'));
    c1.insert(Myhash_multiset::make_value(L'c'));

    // display contents " a b c"
    for each (Myhash_multiset::value_type elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
a b c

hash_multiset::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áximo de armazenamento por new_factor. Nenhuma rehash automático ocorre até uma inserção subsequente.

Exemplo

// cliext_hash_multiset_max_load_factor.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    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 b c
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_multiset::operator=

Substitui a sequência controlada.

Sintaxe

hash_multiset<Key>% operator=(hash_multiset<Key>% right);

Parâmetros

right
O contêiner a ser copiado.

Comentários

O operador membro copia right para o objeto e, em seguida, 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_multiset_operator_as.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c"
    for each (Myhash_multiset::value_type elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // assign to a new container
    Myhash_multiset c2;
    c2 = c1;
// display contents " a b c"
    for each (Myhash_multiset::value_type elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
a b c
a b c

hash_multiset::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_multiset_rbegin.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // inspect first two items in reversed sequence
    Myhash_multiset::reverse_iterator rit = c1.rbegin();
    System::Console::WriteLine("*rbegin() = {0}", *rit);
    System::Console::WriteLine("*++rbegin() = {0}", *++rit);
    return (0);
    }
a b c
*rbegin() = c
*++rbegin() = b

hash_multiset::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_multiset_reference.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    Myhash_multiset::iterator it = c1.begin();
    for (; it != c1.end(); ++it)
        {   // get a reference to an element
        Myhash_multiset::reference ref = *it;
        System::Console::Write("{0} ", ref);
        }
    System::Console::WriteLine();
    return (0);
    }
a b c

hash_multiset::rehash

Recria a tabela de hash.

Sintaxe

void rehash();

Comentários

A função de membro reconstrói a tabela de hash, garantindo que load_factor() <= max_load_factor(). 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_multiset_rehash.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    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 b c
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_multiset::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_multiset_rend.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // inspect first two items
    Myhash_multiset::reverse_iterator rit = c1.rend();
    --rit;
    System::Console::WriteLine("*-- --rend() = {0}", *--rit);
    System::Console::WriteLine("*--rend() = {0}", *++rit);
    return (0);
    }
a b c
*-- --rend() = b
*--rend() = a

hash_multiset::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_multiset_reverse_iterator.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c" reversed
    Myhash_multiset::reverse_iterator rit = c1.rbegin();
    for (; rit != c1.rend(); ++rit)
        System::Console::Write("{0} ", *rit);
    System::Console::WriteLine();
    return (0);
    }
c b a

hash_multiset::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 você se importa é se a sequência tem tamanho diferente de zero, consulte hash_multiset::empty.

Exemplo

// cliext_hash_multiset_size.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    System::Console::WriteLine("size() = {0} starting with 3", c1.size());

    // clear the container and reinspect
    c1.clear();
    System::Console::WriteLine("size() = {0} after clearing", c1.size());

    // add elements and clear again
    c1.insert(L'a');
    c1.insert(L'b');
    System::Console::WriteLine("size() = {0} after adding 2", c1.size());
    return (0);
    }
a b c
size() = 3 starting with 3
size() = 0 after clearing
size() = 2 after adding 2

hash_multiset::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_multiset_size_type.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // compute positive difference
    Myhash_multiset::size_type diff = 0;
    for (Myhash_multiset::iterator it = c1.begin(); it != c1.end(); ++it)
        ++diff;
    System::Console::WriteLine("end()-begin() = {0}", diff);
    return (0);
    }
a b c
end()-begin() = 3

hash_multiset::swap

Alterna o conteúdo de dois contêineres.

Sintaxe

void swap(hash_multiset<Key>% 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_multiset_swap.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct another container with repetition of values
    Myhash_multiset c2;
    c2.insert(L'd');
    c2.insert(L'e');
    c2.insert(L'f');
    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // swap and redisplay
    c1.swap(c2);
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
a b c
d e f
d e f
a b c

hash_multiset::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_multiset_to_array.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // copy the container and modify it
    cli::array<wchar_t>^ a1 = c1.to_array();

    c1.insert(L'd');
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // display the earlier array copy
    for each (wchar_t elem in a1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
a b c d
a b c

hash_multiset::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 de membro determina o último elemento X na sequência controlada que faz hash para o mesmo bucket que key e tem ordem equivalente a key. Se tal elemento não existir, ou se X for o último elemento na sequência controlada, ele retornará end(), caso contrário, ele retorna um iterador que designa o primeiro elemento além Xde . 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_multiset_upper_bound.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    System::Console::WriteLine("upper_bound(L'x')==end() = {0}",
        c1.upper_bound(L'x') == c1.end());

    System::Console::WriteLine("*upper_bound(L'a') = {0}",
        *c1.upper_bound(L'a'));
    System::Console::WriteLine("*upper_bound(L'b') = {0}",
        *c1.upper_bound(L'b'));
    return (0);
    }
a b c
upper_bound(L'x')==end() = True
*upper_bound(L'a') = b
*upper_bound(L'b') = c

hash_multiset::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_multiset_value_comp.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    Myhash_multiset::value_compare^ kcomp = c1.value_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();
    return (0);
    }
compare(L'a', L'a') = True
compare(L'a', L'b') = True
compare(L'b', L'a') = False

hash_multiset::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_multiset_value_compare.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    Myhash_multiset::value_compare^ kcomp = c1.value_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();
    return (0);
    }
compare(L'a', L'a') = True
compare(L'a', L'b') = True
compare(L'b', L'a') = False

hash_multiset::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_multiset_value_type.cpp
// compile with: /clr
#include <cliext/hash_set>

typedef cliext::hash_multiset<wchar_t> Myhash_multiset;
int main()
    {
    Myhash_multiset c1;
    c1.insert(L'a');
    c1.insert(L'b');
    c1.insert(L'c');

    // display contents " a b c" using value_type
    for (Myhash_multiset::iterator it = c1.begin(); it != c1.end(); ++it)
        {   // store element in value_type object
        Myhash_multiset::value_type val = *it;

        System::Console::Write("{0} ", val);
        }
    System::Console::WriteLine();
    return (0);
    }
a b c