Compartilhar via


Classe multimap

A classe de multimapa da Biblioteca Modelo Padrão é usada para o armazenamento e a recuperação de dados de uma coleção em que cada elemento é um par que contém um valor de dados e uma chave de classificação. O valor da chave não precisa ser exclusivo e é usado para ordenar os dados automaticamente. O valor de um elemento em um multimapa, mas não seu valor de chave associado, pode ser alterado diretamente. Em vez disso, os valores de chave associados aos elementos antigos devem ser excluídos e os novos valores de chave associados aos novos elementos inseridos.

template <
   class Key, 
   class Type, 
   class Traits=less<Key>, 
   class Allocator=allocator<pair <const Key, Type> > 
> class multimap;

Parâmetros

  • Key
    O tipo de dados da chave a ser armazenado no multimapa.

  • Type
    O tipo de dados do elemento a ser armazenado no multimapa.

  • Traits
    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 multimapa. 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 mapa da memória. Esse argumento é opcional e o valor padrão é allocator<pair <const Key, Type> >.

Comentários

A classe de multimapa 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, pois seus elementos não precisam ter chaves exclusivas para que um valor de chave possa ter muitos valores de dados de elemento associados a ele.

  • Um contêiner de par associativo, pois seus valores de dados de elemento são distintos de 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 ou chaves. Os tipos de dados a serem usados para elementos e chaves são especificados como parâmetros no modelo de classe juntamente com o alocador e a função de comparação.

O iterador fornecido pela classe de mapa é um iterador bidirecional, mas as funções membro de classe insert e multimap 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 multimapa deve ser o contêiner associativo escolhido quando as condições que associam os valores às respectivas chaves forem atendidas pelo aplicativo. Um modelo para esse tipo de estrutura é uma lista ordenada de palavras-chave com valores de cadeia de caracteres associados que fornecem, por exemplo, definições, em que as palavras nem sempre foram definidas exclusivamente. Se, em vez disso, as palavras-chave foram definidas exclusivamente para que essas chaves fossem exclusivas, um mapa seria o contêiner ideal. Se, por outro lado, apenas as listas de palavras foram sendo armazenadas, um conjunto seria o contêiner correto. Se não foram permitidas as várias ocorrências das palavras, um multiset seria a estrutura de contêiner apropriada.

O multimapa ordena a sequência que controla chamando um objeto de função armazenado do tipo key_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 false. 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.

Membros

Construtores

multimap

Constrói um multimap que está vazio ou que é uma cópia de todo ou parte de algum outro multimap.

Typedefs

allocator_type

Um tipo que representa a classe allocator para o objeto multimap.

const_iterator

Um tipo que fornece um iterador bidirecional que pode ler um elemento const no multimap.

const_pointer

Um tipo que fornece um ponteiro para um elemento const em um multimap.

const_reference

Um tipo que fornece uma referência para um elemento const armazenado em um multimap para leitura e execução de operações const.

const_reverse_iterator

Um tipo que fornece um iterador bidirecional que pode ler qualquer elemento const no multimap.

difference_type

Um tipo de inteiro com sinal que pode ser usado para representar o número de elementos de um multimap em um intervalo entre os elementos apontado pelos iteradores.

iterator

Um tipo que fornece a diferença entre dois iteradores que se referem a elementos no mesmo multimap.

key_compare

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

key_type

Um tipo que descreve o objeto de chave de classificação que constitui cada elemento do multimap.

mapped_type

Um tipo que representa o tipo de dados armazenado em um multimap.

pointer

Um tipo que fornece um ponteiro para um elemento const em um multimap.

reference

Um tipo que fornece uma referência a um elemento armazenado em um multimap.

reverse_iterator

Um tipo que fornece um iterador bidirecional que pode ler ou modificar um elemento em um multimap invertido.

size_type

Um tipo de inteiro sem sinal que fornece um ponteiro para um elemento const em um multimap.

value_type

Um tipo que fornece um objeto de função que pode comparar dois elementos como chaves de classificação para determinar sua ordem relativa no multimap.

Funções membro

begin

Retorna um iterador que trata o primeiro elemento no multimap.

cbegin

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

cend

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

clear

Apaga todos os elementos de um multimap.

count

Retorna o número de elementos em um multimap cuja chave corresponde a uma chave especificada pelo parâmetro.

crbegin

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

crend

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

emplace

Insere um elemento construído adequadamente em um multimap.

emplace_hint

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

empty

Testa se multimap está vazio.

end

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

equal_range

Localiza o intervalo de elementos em que a chave do elemento corresponde a um valor especificado.

erase

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

find

Retorna um iterador que trata o primeiro local de um elemento em um multimap que tem uma chave equivalente a uma chave especificada.

get_allocator

Retorna uma cópia do objeto allocator usada para construir o multimap.

insert

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

key_comp

Recupera uma cópia do objeto de comparação usada para ordenar chaves em um multimap.

lower_bound

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

max_size

Retorna o comprimento máximo do multimap.

rbegin

Retorna um iterador que trata o primeiro elemento em um multimap invertido.

rend

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

size

Retorna o número de elementos no multimap.

swap

Troca os elementos de dois multimaps.

upper_bound

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

value_comp

A função membro retorna um objeto de função que determina a ordem dos elementos em um multimap comparando os respectivos valores de chave.

Operadores

operator=

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

Requisitos

Cabeçalho: <map>

Namespace: std

Os pares (chave, valor) são armazenados em um multimapa como objetos do tipo pair. A classe de par exige o cabeçalho <utility>, que é automaticamente incluído por <map>.

Consulte também

Referência

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

Biblioteca de Modelos Padrão

Conceitos

Contêineres

Outros recursos

<map> Membros