Usando chaves duplicadas com um multimap

Video: Programar Bosch Edc16 con Fgtech Galletto

UMA mapa fornece um método para trabalhar rapidamente com listas de dados de tal forma que você pode acessar 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:

Video: Paranoid cover KuKumberS

#incluir #incluir usando namespace std-int main () {mapa casamentos-casamentos ["Tom"] = "Suzy"-marriages ["Harry"] = "Harriet"-marriages ["Tom"] = "Amy"-cout 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 esse exemplo, você não obter o resultado esperado:

Video: Multimapa|Perdón #1

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 está um exemplo de uma multimap que aborda a nossa questão:



#incluir #incluir usando espaço de nomes std-int main () {MultiMap uniões-marriages.insert (par ("Tom", "Suzy")) - marriages.insert (par ("Harry", "Harriet")) - marriages.insert (par ("Tom", "Amy")) - para (Valores multimap :: iterator = marriages.begin (!) - Valores = marriages.end () - ++ Valores) {cout lt; lt; (* Valores) .first lt; lt; " é casado com " lt; lt; (* Valores) .segunda lt; lt; endl-} cout lt; lt; endl lt; lt; "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 gt; segundo lt; lt; endl - ++ valores-} return 0-}

Neste caso, você ainda criar um objeto contendo dois corda objetos, a primeira das quais é a chave. A inserir() função permite adicionar novas entradas para 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. Os primeiros lista todas as entradas em casamentos. Ela começa com a criação de um iterador que aponta para o início de casamentos usando o marriages.begin () função. O ciclo continua enquanto valores não é igual a 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) .first para acessar a primeira corda na entrada ou Valores gt; primeiro.

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 da chave que deseja localizar. o encontrar() função torna possível para criar um iterador que contém apenas as entradas para uma chave específica. O exemplo mostra uma técnica para iterar os valores que você encontrar. A saída deste exemplo parecido com este:

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

Publicações relacionadas