Compartilhar via


Classe multiset

A classe multiset Biblioteca de Modelos Padrão é usada para o armazenamento e a recuperação de dados de uma coleção na qual os valores dos elementos contidos não precisam ser exclusivos e na qual eles atuam como valores de chave, de acordo com os quais os dados são automaticamente ordenados. O valor de chave de um elemento em um multiset não pode ser alterado diretamente. Em vez disso, os valores antigos devem ser excluídos e os elementos com novos valores inseridos.

template < 
   class Key,  
   class Compare=less<Key>,  
   class Allocator=allocator<Key>  
> 
class multiset

Parâmetros

  • Key
    O tipo de dados do elemento a ser armazenado no multiset.

  • Compare
    O tipo que fornece um objeto de função que pode comparar dois valores de elemento como chaves de classificação para determinar sua ordem relativa no multiset. O predicado binário less<Key> é o valor padrão.

  • Allocator
    O tipo que representa o objeto de alocador armazenado que encapsula detalhes sobre a alocação e a desalocação do multiset da memória. O valor padrão é allocator*<Key>.*

Comentários

A classe multiset da STL é:

  • Um contêiner associativo, que é um contêiner de tamanho variável que oferece suporte à recuperação eficiente dos valores de elemento com base em um valor de chave associado.

  • Reversível, pois fornece iteradores bidirecionais para acessar seus elementos.

  • Classificada, pois seus elementos são ordenados por valores de chave no contêiner, de acordo com uma função de comparação especificada.

  • Múltipla no sentido de que seus elementos não precisam ter chaves exclusivas para que um valor de chave possa ter muitos valores de elemento associados a ele.

  • Um contêiner associativo simples, pois seus valores de elemento são seus valores de chave.

  • Uma classe de modelo, pois a funcionalidade fornecida por ela é genérica e, portanto, independente do tipo de dados específico contido como elementos. O tipo de dados a ser usado é especificado como um parâmetro no modelo de classe juntamente com a função de comparação e o alocador.

O iterador fornecido pela classe multiset é um iterador bidirecional, mas as funções membro de classe insert e multiset possuem versões que usam como parâmetros de modelo um iterador de entrada mais fraco, cujos requisitos de funcionalidade são mais minimalistas do que os garantidos pela classe de iteradores bidirecionais. Os conceitos de iterador diferente formam uma família relacionada por refinamentos em sua funcionalidade. Cada conceito de iterador tem seu próprio conjunto de requisitos e os algoritmos que funcionam com eles devem limitar suas suposições para os requisitos fornecidos por esse tipo de iterador. Pode ser pressuposto que um iterador de entrada possa ser desreferenciado para fazer referência a algum objeto e que possa ser incrementado para o próximo iterador na sequência. Esse é um conjunto mínimo de funcionalidade, mas é suficiente para poder expressar de forma significativa um intervalo de iteradores [First, Last) no contexto de funções membro da classe.

A escolha do tipo de contêiner deve se basear, de modo geral, no tipo de pesquisa e inserção exigido pelo aplicativo. Os contêineres associativos são otimizados para as operações de pesquisa, inserção e remoção. As funções membro que oferecem suporte explicitamente a essas operações são eficientes, executando-as em um tempo que está na média proporcional para o logaritmo do número de elementos no contêiner. A inserção de elementos não invalida iteradores e a remoção de elementos invalida apenas os iteradores que apontavam especificamente os elementos removidos.

O multiset deve ser o contêiner associativo escolhido quando as condições que associam os valores às respectivas chaves forem atendidas pelo aplicativo. Os elementos de um multiset podem ser múltiplos e atuar como suas próprias chaves de classificação, de modo que as chaves não são exclusivas. Um modelo para esse tipo de estrutura é uma lista ordenada de palavras, por exemplo, na qual as palavras podem ocorrer mais de uma vez. Não tendo sido permitidas as várias ocorrências das palavras, um conjunto seria a estrutura de contêiner apropriada. Se as definições exclusivas fossem anexadas como valores à lista de palavras-chave exclusivas, um mapa seria uma estrutura apropriada para conter esses dados. Se, em vez disso, as definições não fossem exclusivas, um multimapa seria o contêiner ideal.

O multiset ordena a sequência que controla chamando um objeto de função armazenado do tipo Compare. Esse objeto armazenado é uma função de comparação que pode ser acessada chamando a função membro key_comp. De modo geral, os elementos precisam ser simplesmente menores que os comparáveis para estabelecer essa ordem: desse modo, considerando dois elementos, pode ser determinado que, ou eles são equivalentes (no sentido de que nenhum deles é menor que o outro), ou que um é menor que o outro. Isso resulta em uma ordenação entre os elementos não equivalentes. Fazendo uma observação mais técnica, a função de comparação é um predicado binário que induz a uma ordenação fraca restrita no sentido matemático padrão. Um predicado binário f(x,y) é um objeto de função que possui dois objetos de argumento x e y e um valor de retorno de true ou false. Uma ordenação imposta em um conjunto será uma ordenação fraca restrita se o predicado binário for irreflexivo, antissimétrico e transitivo, e se a equivalência for transitiva, onde dois objetos x e y são definidos para serem equivalentes quando ambos, f(x,y) e f(y,x) são falsos. Se a condição mais forte de igualdade entre as chaves substituir essa equivalência, a ordenação será total (no sentido de que todos os elementos serão ordenados um em relação ao outro) e as chaves correspondentes não poderão ser diferenciadas uma da outra.

Construtores

multiset

Constrói um multiset que está vazio ou que é uma cópia de todo ou parte de um multiset especificado.

Typedefs

allocator_type

Um typedef para a classe allocator do objeto multiset.

const_iterator

Um typedef para um iterador bidirecional que pode ler um elemento const no multiset.

const_pointer

Um typedef de um ponteiro para um elemento const em um multiset.

const_reference

Um typedef de uma referência para um elemento const armazenado em um multiset para leitura e execução de operações const.

const_reverse_iterator

Um typedef para um iterador bidirecional que pode ler qualquer elemento const no multiset.

difference_type

Um typedef de inteiro com sinal para o número de elementos de um multiset em um intervalo entre os elementos apontado pelos iteradores.

iterator

Um typedef para um iterador bidirecional que pode ler ou modificar qualquer elemento em um multiset.

key_compare

Um typedef de um objeto de função que pode comparar duas chaves para determinar a ordem relativa de dois elementos no multiset.

key_type

Um typedef de um objeto de função que pode comparar duas chaves de classificação para determinar a ordem relativa de dois elementos no multiset.

pointer

Um typedef de um ponteiro para um elemento em um multiset.

reference

Um typedef de uma referência para um elemento armazenado em um multiset.

reverse_iterator

Um typedef para um iterador bidirecional que pode ler ou modificar um elemento em um multiset invertido.

size_type

Um tipo de inteiro sem sinal que pode representar o número de elementos em um multiset.

value_compare

O typedef de um objeto de função que pode comparar dois elementos como chaves de classificação para determinar sua ordem relativa no multiset.

value_type

Um typedef que descreve um objeto armazenado como um elemento enquanto um multiset em sua capacidade como um valor.

Funções membro

begin

Retorna um iterador que aponta para o primeiro elemento no multiset.

cbegin

Retorna um iterador const que trata o primeiro elemento no multiset.

cend

Retorna um iterador const que trata o local após o último elemento em um multiset.

clear

Apaga todos os elementos de um multiset.

count

Retorna o número de elementos em um multiset cuja chave corresponde à chave especificada como um parâmetro.

crbegin

Retorna um iterador const que trata o primeiro elemento em um conjunto invertido.

crend

Retorna um iterador const que trata o local após o último elemento em um conjunto invertido.

emplace

Insere um elemento construído adequadamente em um multiset.

emplace_hint

Insere um elemento construído adequadamente em um multiset, com uma dica de posicionamento.

empty

Testa se multiset está vazio.

end

Retorna um iterador que aponta para o local após o último elemento em um multiset.

equal_range

Retorna um par de iteradores. O primeiro iterador no par aponta para o primeiro elemento em um multiset com uma chave que é maior que uma chave especificada. O segundo iterador no par aponta para o primeiro elemento no multiset com uma chave que é igual ou maior que a chave.

erase

Remove um elemento ou um intervalo de elementos em um multiset das posições especificadas ou remove elementos que correspondem a uma chave especificada.

find

Retorna um iterador que aponta para o primeiro local de um elemento em um multiset que tem uma chave igual a uma chave especificada.

get_allocator

Retorna uma cópia do objeto allocator que é usada para construir o multiset.

insert

Insere um elemento ou um intervalo de elementos em um multiset.

key_comp

Fornece um objeto de função que pode comparar duas chaves de classificação para determinar a ordem relativa de dois elementos no multiset.

lower_bound

Retorna um iterador para o primeiro elemento em um multiset com uma chave que é igual ou maior que uma chave especificada.

max_size

Retorna o comprimento máximo do multiset.

rbegin

Retorna um iterador que aponta para o primeiro elemento em um multiset invertido.

rend

Retorna um iterador que aponta para o local após o último elemento em um multiset invertido.

size

Retorna o número de elementos em um multiset.

swap

Troca os elementos de dois multisets.

upper_bound

Retorna um iterador para o primeiro elemento em um multiset com uma chave que é maior que uma chave especificada.

value_comp

Recupera uma cópia do objeto de comparação que é usada para ordenar valores de elemento em um multiset.

Operadores

operator=

Substitui os elementos de um multiset por uma cópia de outro multiset.

Requisitos

Cabeçalho: <set>

Namespace: std

Consulte também

Referência

Segurança de threads na Biblioteca Padrão C++

Biblioteca de Modelos Padrão

Conceitos

Contêineres

Outros recursos

<set> Membros