Usando chaves duplicadas com um multimap

UMA mapa fornece um método para trabalhar rapidamente com listas de dados de tal forma que pode aceder a cada elemento facilmente com uma chave. Usando um mapa é conveniente porque você pode acessar os itens em uma ordem aleatória. No entanto, cada chave deve ser exclusivo. Não é como se o seu aplicativo falhará se você atribuir um valor a uma cópia da chave - o duplicado irá simplesmente substituir o valor original. Aqui está um exemplo:

#incluir #incluir usando namespace std-int main () {mapa casamentos-casamentos [ "tom"] = "Suzy" -marriages [ "Harry"] = "Harriet" -marriages [ "Tom"] = -cout "Amy" lt; lt; casamentos [ "Tom"] lt; lt; endl-cout lt; lt; casamentos [ "Harry"] lt; lt; endl-retorno 0-}

Note-se que há realmente dois homens chamados Tom, mas eles têm esposas com nomes diferentes. Quando você executar este exemplo, você não obter o resultado esperado:

AmyHarriet

O valor original é perdido porque um mapa só pode ter uma chave chamada Tom. Você pode usar um multimap para superar este problema. UMA multimap tem a mesma premissa básica de permitir que você atribui valores com base em uma chave, mas a variável resultante pode ter entradas duplicadas. Aqui é um exemplo de um multimap que aborda a questão:

#incluir #incluir usando namespace main () {MultiMap casamentos-marriages.insert (par ( "Tom", "Suzy")) std-int - marriages.insert (par ( "Harry", "Harriet")) - marriages.insert (par ( "Tom", "Amy")) - para (multimap :: iterator Valores = marriages.begin (!) - Valores = marriages.end () - ++ Valores) {cout lt; lt; (* Valores) .Em primeiro lugar lt; lt; "É casada com o" lt; lt; (* Valores) .segunda lt; lt; endl-} cout lt; lt; endl lt; lt; "As mulheres casadas com homens nomeados Tom" lt; lt; Valores endl-multimap :: const_iterator = marriages.find ( "Tom") - Número int = marriages.count ( "Tom") - para (int i = 0- i lt; Number-i ++) {cout lt; lt; Valores-> segunda lt; lt; endl - ++ valores-} return 0-}

Neste caso, você ainda criar um objeto contendo dois corda objectos, a primeira das quais é a chave. A inserir() função permite adicionar novas entradas casamentos. A técnica é diferente do uso de uma norma mapa, mas o resultado é o mesmo. Cada entrada consiste em dois corda valores.

Para exibir as entradas, você deve trabalhar com iteradores. O exemplo mostra duas abordagens que você pode usar. As primeiras listas de todas as entradas em casamentos. Ela começa com a criação de uma iteração que aponta para o início das uniões utilizando o marriages.begin () função. O loop continua enquanto valores não é igual marriages.end (). Observe a notação de prefixo usado para atualizar valores para a próxima entrada na lista. Também é importante notar que valores fornece um ponteiro para os dados, para que você deve usar (* Valores) .Em primeiro lugar para acessar a primeira corda na entrada ou Valores-> primeira.

UMA multimap é realmente muito flexível. Você pode contar o número de entradas de chave duplicados usando o contagem() função. Para utilizar esta função, você deve fornecer o valor de chave que deseja localizar. o encontrar() função torna possível a criação de um iterador que contém apenas as entradas para uma chave específica. O exemplo mostra uma técnica para a iteração através dos valores que você encontrar. A saída deste exemplo tem esta aparência:

Harry é casado com HarrietTom é casada com SuzyTom é casada com AmyWomen Casado com homens chamados TomSuzyAmy

menu