Criar um Dicionário em C++

  1. Usar o Construtor da Lista Inicializadora para Criar um Dicionário em C++
  2. Utilizar o Construtor Padrão para Criar um Dicionário em C++
  3. Utilize o Construtor copy para Criar um Dicionário em C++
  4. Utilize o Construtor Baseado na Gama para Criar um Dicionário em C++

Este artigo irá introduzir como criar um dicionário em C++.

Usar o Construtor da Lista Inicializadora para Criar um Dicionário em C++

Na biblioteca de contentores padrão C++, um dicionário chama-se std::map, que implementa pares de valores de chaves ordenados com chaves únicas. Operações nos elementos map como pesquisar, remover e inserir pares têm complexidade logarítmica. Este método utiliza parênteses encaracolados para inicializar o objecto map com valores literais. Note-se que cada par de elementos é separado pela vírgula, como se mostra no exemplo de código seguinte.

#include <iostream>
#include <map>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::map; using std::copy;

template<typename Map>
void PrintMap(Map& m)
{
    cout << "[ ";
    for (auto &item : m) {
        cout << item.first << ":" << item.second << " ";
    }
    cout << "]\n";
}

int main() {
    map<int, string> map1 = {{1, "Apple",},
                                {2, "Banana",},
                                {3, "Mango",},
                                {4, "Raspberry",},
                                {5, "Blackberry",},
                                {6, "Cocoa",}};

    cout << "map1 - ";
    PrintMap(map1);
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

map1 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]

Utilizar o Construtor Padrão para Criar um Dicionário em C++

Em alternativa, podemos declarar um objecto do tipo map com determinados parâmetros e depois inicializar cada par de valores-chave utilizando uma declaração separada. Nesta amostra, demonstramos um mapa com as teclas int e os valores de string. Podemos sempre colocar estas declarações no laço ou retirar valores da entrada do utilizador, o que corresponderia melhor a um cenário de aplicação no mundo real.

#include <iostream>
#include <map>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::map; using std::copy;

template<typename Map>
void PrintMap(Map& m)
{
    cout << "[ ";
    for (auto &item : m) {
        cout << item.first << ":" << item.second << " ";
    }
    cout << "]\n";
}

int main() {
    map<int, string> map2;
    map2[1] = "Banana";
    map2[2] = "Mango";
    map2[3] = "Cocoa";
    map2[4] = "Raspberry";

    cout << "map2 - ";
    PrintMap(map2);
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

map2 - [ 1:Banana 2:Mango 3:Cocoa 4:Raspberry ]

Utilize o Construtor copy para Criar um Dicionário em C++

Outra solução para criar um novo objecto map é utilizar um construtor copy, que toma outra variável map existente como argumento e copia os pares de valores chave para o objecto recém inicializado. Note-se que este método não move o objecto map existente e pode ser reutilizado mais tarde durante a execução do programa.

#include <iostream>
#include <map>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::map; using std::copy;

template<typename Map>
void PrintMap(Map& m)
{
    cout << "[ ";
    for (auto &item : m) {
        cout << item.first << ":" << item.second << " ";
    }
    cout << "]\n";
}

int main() {
    map<int, string> map1 = {{1, "Apple",},
                                {2, "Banana",},
                                {3, "Mango",},
                                {4, "Raspberry",},
                                {5, "Blackberry",},
                                {6, "Cocoa",}};

    map<int, string> map3(map1);

    cout << "map3 - ";
    PrintMap(map3);
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

map3 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]

Utilize o Construtor Baseado na Gama para Criar um Dicionário em C++

O construtor baseado na gama é outra alternativa aos métodos anteriores. Esta solução pode ser utilizada para inicializar uma nova variável map com os pares de valores chave subconjuntos de alguns objectos map existentes. Neste exemplo, utilizamos o método find para especificar o primeiro par de valores-chave na gama. Consequentemente, uma nova variável map2 contém pares que vão desde o valor chave 2 até ao último elemento do objecto map1.

#include <iostream>
#include <map>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::map; using std::copy;

template<typename Map>
void PrintMap(Map& m)
{
    cout << "[ ";
    for (auto &item : m) {
        cout << item.first << ":" << item.second << " ";
    }
    cout << "]\n";
}

int main() {
    map<int, string> map1 = {{1, "Apple",},
                                {2, "Banana",},
                                {3, "Mango",},
                                {4, "Raspberry",},
                                {5, "Blackberry",},
                                {6, "Cocoa",}};

    map<int, string> map4(map1.find(2), map1.end());

    cout << "map4 - ";
    PrintMap(map4);
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

map4 - [ 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]