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;
}

 
 

Saída
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;
}

 
 

Saída
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

  1. 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.

Quer aprender com os melhores vídeos com curadoria e problemas práticos, confira o C++ Foundation Course for Basic to Advanced C++ e C++ STL Course for Foundation plus STL. Para completar sua preparação desde o aprendizado de um idioma até o DS Algo e muitos mais, consulte o Curso Completo de Preparação para Entrevistas .