Adicionar Elemento ao Vector de Pares em C++

Jinku Hu 12 outubro 2023
  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
Adicionar Elemento ao Vector de Pares em C++

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::cin;
using std::cout;
using std::endl;
using std::make_pair;
using std::pair;
using std::string;
using std::vector;

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::cin;
using std::cout;
using std::endl;
using std::make_pair;
using std::pair;
using std::string;
using std::vector;

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::cin;
using std::cout;
using std::endl;
using std::make_pair;
using std::pair;
using std::string;
using std::vector;

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);
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Vector