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::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);