Adicionar Elemento ao Vector de Pares em C++

  1. Utilizar push_back e make_pair para adicionar um elemento a um vector de pares
  2. Utilize push_back e Cast to Pair para adicionar um elemento ao vector de pares
  3. Utilizar emplace_back para adicionar elemento ao vector de pares

Este artigo explicará vários métodos para adicionar um elemento a um vector de pares em C++.

Utilizar push_back e make_pair para adicionar um elemento a um vector de pares

O contentor vector pode conter elementos do tipo std::par, que é o modelo de classe para conter os dois tipos de objectos heterogéneos como uma unidade de dados. É semelhante ao tipo de dados tuple mais geralmente conhecido de diferentes linguagens de programação como Python, excepto que só pode conter 2 elementos.

Um vector de pares é declarado com a expressão - vector<par<int, string>> e pode ser inicializado da mesma forma que a estrutura. Uma vez que precisamos de empurrar elementos adicionais do tipo std::par para o vector, o método push_back pode ser utilizado. Note-se, no entanto, que precisa de um elemento a ser construído utilizando a função make_pair.

No exemplo seguinte, utilizamos <int, string> pares e a sintaxe para adicionar um elemento ao vector de pares é push_back(make_pair(55, "five-five")).

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector; using std::pair;
using std::make_pair;

template<typename T>
void printVectorElements(vector<T> &vec)
{
    for (auto i = 0; i < vec.size(); ++i) {
        cout << "(" << vec.at(i).first << ","
            << vec.at(i).second << ")" << "; ";
    }
    cout << endl;
}

int main() {
    vector<pair<int, string>> vec1 = {{12, "twelve"},
                                      {32, "thirty-two"},
                                      {43, "forty-three"}};

    cout << "vec1: ";
    printVectorElements(vec1);

    vec1.push_back(make_pair(55, "fifty-five"));

    cout << "vec1: ";
    printVectorElements(vec1);
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

vec1: (12,twelve); (32,thirty-two); (43,forty-three);
vec1: (12,twelve); (32,thirty-two); (43,forty-three); (55,fifty-five);

Utilize push_back e Cast to Pair para adicionar um elemento ao vector de pares

Como alternativa ao método anterior, podemos lançar os valores literais a um par e depois inserir a expressão no método push_back. Embora, este método seja menos claro para a legibilidade e, sem dúvida, sujeito a erros para bases de códigos maiores.

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector; using std::pair;
using std::make_pair;

template<typename T>
void printVectorElements(vector<T> &vec)
{
    for (auto i = 0; i < vec.size(); ++i) {
        cout << "(" << vec.at(i).first << ","
            << vec.at(i).second << ")" << "; ";
    }
    cout << endl;
}

int main() {
    vector<pair<int, string>> vec1 = {{12, "twelve"},
                                      {32, "thirty-two"},
                                      {43, "forty-three"}};

    cout << "vec1: ";
    printVectorElements(vec1);

    vec1.push_back(pair(55, "fifty-five"));

    cout << "vec1: ";
    printVectorElements(vec1);
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

vec1: (12,twelve); (32,thirty-two); (43,forty-three);
vec1: (12,twelve); (32,thirty-two); (43,forty-three); (55,fifty-five);

Utilizar emplace_back para adicionar elemento ao vector de pares

O método emplace_back é uma função integrada do recipiente vector que constrói um novo elemento no fim do objecto. Note que, para que o emplace_back funcione, um tipo de elemento deve ter um construtor de args. Uma vez que estamos a utilizar a função para construir os elementos std::pair, é seguro chamar-lhe com valores literais, como se mostra na seguinte amostra de código.

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector; using std::pair;
using std::make_pair;

template<typename T>
void printVectorElements(vector<T> &vec)
{
    for (auto i = 0; i < vec.size(); ++i) {
        cout << "(" << vec.at(i).first << ","
            << vec.at(i).second << ")" << "; ";
    }
    cout << endl;
}

int main() {
    vector<pair<int, string>> vec1 = {{12, "twelve"},
                                      {32, "thirty-two"},
                                      {43, "forty-three"}};

    cout << "vec1: ";
    printVectorElements(vec1);

    vec1.emplace_back(55, "fifty-five");

    cout << "vec1: ";
    printVectorElements(vec1);
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

vec1: (12,twelve); (32,thirty-two); (43,forty-three);
vec1: (12,twelve); (32,thirty-two); (43,forty-three); (55,fifty-five);

Artigo relacionado - C++ Vector

  • Como imprimir o conteúdo de um vetor em C++
  • Como devolver um vetor a partir de uma função em C++