Adicionar Elemento ao Vector de Pares em C++
-
Utilizar
push_back
emake_pair
para adicionar um elemento a um vector de pares -
Utilize
push_back
e Cast to Pair para adicionar um elemento ao vector de pares -
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::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);
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