Par em C++ Standard Template Library (STL)
O contêiner de pares é um contêiner simples definido no cabeçalho <utility> que consiste em dois elementos de dados ou objetos.
- O primeiro elemento é referido como 'primeiro' e o segundo elemento como 'segundo' e a ordem é fixa (primeiro, segundo).
- O par é usado para combinar dois valores que podem ser de tipos diferentes. O par fornece uma maneira de armazenar dois objetos heterogêneos como uma única unidade.
- O par pode ser atribuído, copiado e comparado. A matriz de objetos alocados em um mapa ou hash_map são do tipo 'par' por padrão, em que todos os 'primeiros' elementos são chaves exclusivas associadas aos seus 'segundos' objetos de valor.
- Para acessar os elementos, usamos o nome da variável seguido pelo operador ponto seguido pela palavra-chave primeiro ou segundo.
Sintaxe:
pair (data_type1, data_type2) Pair_name
// CPP program to illustrate pair STL
#include <iostream>
#include <utility>
using namespace std;
int main()
{
pair<int, char> PAIR1;
PAIR1.first = 100;
PAIR1.second = 'G';
cout << PAIR1.first << " ";
cout << PAIR1.second << endl;
return 0;
}
100G
Inicializando um par
Também podemos inicializar um par.
Sintaxe:
pair (data_type1, data_type2) Pair_name (value1, value2) ;
Diferentes maneiras de inicializar o par:
pair g1; //default pair g2(1, 'a'); //initialized, different data type pair g3(1, 10); //initialized, same data type pair g4(g3); //copy of g3
Outra maneira de inicializar um par é usando a função make_pair().
g2 = make_pair(1, 'a');
Outra sintaxe válida para declarar o par é:
g2 = {1, 'a'};
// CPP program to illustrate
// Initializing of pair STL
#include <iostream>
#include <utility>
using namespace std;
int main()
{
pair<string, double> PAIR2("GeeksForGeeks", 1.23);
cout << PAIR2.first << " ";
cout << PAIR2.second << endl;
return 0;
}
GeeksForGeeks 1.23
Nota: Se não inicializado, o primeiro valor do par é inicializado automaticamente.
// CPP program to illustrate
// auto-initializing of pair STL
#include <iostream>
#include <utility>
using namespace std;
int main()
{
pair<int, double> PAIR1;
pair<string, char> PAIR2;
// it is initialised to 0
cout << PAIR1.first;
// it is initialised to 0
cout << PAIR1.second;
cout << " ";
// // it prints nothing i.e NULL
cout << PAIR2.first;
// it prints nothing i.e NULL
cout << PAIR2.second;
return 0;
}
Saída:
00
Funções de membro
- make_pair() : Esta função de modelo permite criar um par de valores sem escrever os tipos explicitamente.
Sintaxe:
Pair_name = make_pair (value1,value2);
#include <iostream>
#include <utility>
using namespace std;
int main()
{
pair <int, char> PAIR1 ;
pair <string, double> PAIR2 ("GeeksForGeeks", 1.23) ;
pair <string, double> PAIR3 ;
PAIR1.first = 100;
PAIR1.second = 'G' ;
PAIR3 = make_pair ("GeeksForGeeks is Best",4.56);
cout << PAIR1.first << " " ;
cout << PAIR1.second << endl ;
cout << PAIR2.first << " " ;
cout << PAIR2.second << endl ;
cout << PAIR3.first << " " ;
cout << PAIR3.second << endl ;
return 0;
}
Saída:
100 G GeeksForGeeks 1.23 GeeksForGeeks is Best 4.56
operadores (=, ==,! =,> =, <=): Também podemos usar operadores com pares.
- usando igual (=): Atribui novo objeto para um objeto de par.
Sintaxe:
pair& operator= (const pair& pr);
- Isso atribui pr como o novo conteúdo para o objeto de par. O primeiro valor é atribuído ao primeiro valor de pr e ao segundo valor é atribuído o segundo valor de pr.
- Operador de comparação (==) com par: para dois pares dados, diga par1 e par2, o operador de comparação compara o primeiro valor e o segundo valor desses dois pares, ou seja, se par1.first for igual a par2.first ou não E se par1.segundo é igual a pair2.second ou não.
- Operador diferente (! =) Com par: Para dados dois pares, diga par1 e par2, o operador! = Compara os primeiros valores desses dois pares, ou seja, se par1.first for igual a par2.first ou não, se eles forem iguais, então ele verifica os segundos valores de ambos.
- Operadores lógicos (> =, <=) com par: Para dados dois pares, diga par1 e par2, o =,>, também pode ser usado com pares. Ele retorna 0 ou 1 comparando apenas o primeiro valor do par.
Para pares como p1 = (1,20) e p2 = (1,10)
p2 <p1 deve fornecer 0 (uma vez que compara apenas o primeiro elemento e eles são iguais, então definitivamente não é menor), mas isso não é verdade. Aqui, o par compara o segundo elemento e, se satisfaz, retorna 1
(este é apenas o caso quando o primeiro elemento fica igual ao usar um operador relacional> ou <apenas, caso contrário, esses operadores funcionam conforme mencionado acima)
swap: Esta função troca o conteúdo de um objeto de par com o conteúdo de outro objeto de par. Os pares devem ser do mesmo tipo.
Sintaxe:
pair1.swap(pair2) ;
Para dois pares dados, diga par1 e par2 do mesmo tipo, a função de troca irá trocar o par1.first com par2.first e par1.segundo com par2.segundo.
#include <iostream>
#include<utility>
using namespace std;
int main()
{
pair<char, int>pair1 = make_pair('A', 1);
pair<char, int>pair2 = make_pair('B', 2);
cout << "Before swapping:\n " ;
cout << "Contents of pair1 = "
<< pair1.first << " " << pair1.second ;
cout << "Contents of pair2 = "
<< pair2.first << " " << pair2.second ;
pair1.swap(pair2);
cout << "\nAfter swapping:\n ";
cout << "Contents of pair1 = "
<< pair1.first << " " << pair1.second ;
cout << "Contents of pair2 = "
<< pair2.first << " " << pair2.second ;
return 0;
}
Produto :
Before swapping: Contents of pair1 = (A, 1) Contents of pair2 = (B, 2) After swapping: Contents of pair1 = (B, 2) Contents of pair2 = (A, 1)
tie(): Esta função funciona da mesma forma que nas tuplas . Ele cria uma tupla de referências de lvalue para seus argumentos, isto é, para desempacotar os valores da tupla (ou aqui par) em variáveis separadas. Assim como nas tuplas, aqui também estão duas variantes de empate, com e sem “ignorar”. A palavra-chave “ignore” ignora que um determinado elemento da tupla seja descompactado.
No entanto, as tuplas podem ter vários argumentos, mas os pares têm apenas dois argumentos. Portanto, no caso de pares de pares, a descompactação precisa ser tratada explicitamente.
Sintaxe:
tie(int &, int &) = pair1;
// CPP code to illustrate tie() in pairs
#include <bits/stdc++.h>
using namespace std;
int main()
{
pair<int, int> pair1 = { 1, 2 };
int a, b;
tie(a, b) = pair1;
cout << a << " " << b << "\n";
pair<int, int> pair2 = { 3, 4 };
tie(a, ignore) = pair2;
// prints old value of b
cout << a << " " << b << "\n";
// Illustrating pair of pairs
pair<int, pair<int, char> > pair3
= { 3, { 4, 'a' } };
int x, y;
char z;
// tie(x,y,z) = pair3; Gives compilation error
// tie(x, tie(y,z)) = pair3; Gives compilation error
// Each pair needs to be explicitly handled
x = pair3.first;
tie(y, z) = pair3.second;
cout << x << " " << y << " " << z << "\n";
}
// contributed by sarthak_eddy.
Saída :
1 2 3 2 3 4 a
//CPP program to illustrate pair in STL
#include <iostream>
#include <utility>
#include <string>
using namespace std;
int main()
{
pair <string, int> g1;
pair <string, int> g2("Quiz", 3);
pair <string, int> g3(g2);
pair <int, int> g4(5, 10);
g1 = make_pair(string("Geeks"), 1);
g2.first = ".com";
g2.second = 2;
cout << "This is pair g" << g1.second << " with "
<< "value " << g1.first << "." << endl << endl;
cout << "This is pair g" << g3.second
<< " with value " << g3.first
<< "This pair was initialized as a copy of "
<< "pair g2" << endl << endl;
cout << "This is pair g" << g2.second
<< " with value " << g2.first
<< "\nThe values of this pair were"
<< " changed after initialization."
<< endl << endl;
cout << "This is pair g4 with values "
<< g4.first << " and " << g4.second
<< " made for showing addition. \nThe "
<< "sum of the values in this pair is "
<< g4.first+g4.second
<< "." << endl << endl;
cout << "We can concatenate the values of"
<< " the pairs g1, g2 and g3 : "
<< g1.first + g3.first + g2.first
<< endl << endl;
cout << "We can also swap pairs "
<< "(but type of pairs should be same) : "
<< endl;
cout << "Before swapping, " << "g1 has "
<< g1.first
<< " and g2 has " << g2.first << endl;
swap(g1, g2);
cout << "After swapping, "
<< "g1 has " << g1.first << " and g2 has "
<< g2.first;
return 0;
}
Saída:
This is pair g1 with value Geeks. This is pair g3 with value Quiz This pair was initialized as a copy of pair g2 This is pair g2 with value .com The values of this pair were changed after initialization. This is pair g4 with values 5 and 10 made for showing addition. The sum of the values in this pair is 15. We can concatenate the values of the pairs g1, g2 and g3 : GeeksQuiz.com We can also swap pairs (but type of pairs should be same) : Before swapping, g1 has Geeks and g2 has .com After swapping, g1 has .com and g2 has Geeks
https://youtu.be/4LG1H3x6
-BQ? List = PLqM7alHXFySGg6GSRmE2INI4k8fPH5qVB
Este artigo é uma contribuição de MAZHAR IMAM KHAN . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando write.geeksforgeeks.org ou enviar seu artigo para review-team@geeksforgeeks.org. Veja seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.
Aprendendo inglês e usando o Anki? Use o Faluchu e esqueça os cartões. É gratis!
Usar o Faluchu