C++ - Utilitários std::pair e std::tuple

Trabalhando com tipos diferentes com um único tipo com uma ferramenta já existente da STL.


C++ - Utilitários std::pair e std::tuple

std::pair e std::make_pair

std::pair é um contêiner simples definido no cabeçalho <utility> que consiste em dois elementos de dados ou objetos.

O primeiro elemento é referido como first e o segundo elemento como second e a ordem é fixa (first, second).

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

Exemplo simples de uso:

#include <iostream>
#include <utility>

int main(){

  std::pair<int, const char*> par;

  par.first = 936;
  par.second = "Terminal Root";

  std::cout << "Primeiro: " << par.first << '\n';
  std::cout << "Segundo: " << par.second << '\n';
  return 0;
}

Podemos também iniciálizá-los com os valores que desejamos, exemplo:

#include <iostream>
#include <utility>

int main(){

  std::pair<int, const char*> par( 52, "Marcos Oliveira" );

  std::cout << "Primeiro: " << par.first << '\n';
  std::cout << "Segundo: " << par.second << '\n';
  return 0;
}

Ainda podemos alterar/definir valores utilizando o std::make_pair

#include <iostream>
#include <utility>

int main(){

  std::pair<int, const char*> par;

  par = std::make_pair( 43, "Valeu, meu bródi!" );

  std::cout << "Primeiro: " << par.first << '\n';
  std::cout << "Segundo: " << par.second << '\n';
  return 0;
}

A menos que você inicialize o std::pair como auto, não é possível modificar os valores, e também só é possível utilizar 2 valores, no entanto para isso é indicado o uso de std::tuple que aceita tipos diferentes e quantidades maiores.


std::tuple

Uma tupla é um objeto que pode conter vários elementos. Os elementos podem ser de diferentes tipos de dados.

Os elementos das tuplas são inicializados como argumentos na ordem em que serão acessados.

Nesse primeiro exemplo podemos notar que:

  • precisamos incluir o cabeçalho <tuple>
  • não inicializamos nossa tupla terroo;
  • utilizamos std::make_tuple para definir os valores baseados nos tipos;
  • obtemos os valores utilizando std::get<N>(terroo)
#include <iostream>
#include <tuple>

int main(){
  std::tuple<int, const char*, bool> terroo;

  terroo = std::make_tuple( 18, "É isso aê, manoo!", true );
  
  std::cout << "Primero: " << std::get<0>(terroo) << '\n';
  std::cout << "Segundo: " << std::get<1>(terroo) << '\n';
  std::cout << "Terceiro: " << std::get<2>(terroo) << '\n';
  
  return 0;
}

Para esse caso o tipo bool, lógico, imprimirá 1.

Você também podia declarar a tupla já inicializando os tipos:

std::tuple<int, const char*, bool> terroo( 18, "É isso aê, manoo!", true );

Para obter o tamanho(número de elementos) da tupla, basta usar: tuple_size:

std::cout << "O tamanho da tupla 'terroo' é: " << 
            std::tuple_size<decltype(terroo)>::value << '\n';

É possível alterar o valor de um determinado elemento da tupla, exemplo: alterar o segundo elemento que é um const char*:

#include <iostream>
#include <tuple>

int main(){
  std::tuple<int, const char*, bool> terroo( 18, "É isso aê, manoo!", true );

  std::cout << "Segundo(ANTES): " << std::get<1>(terroo) << '\n';
  std::get<1>(terroo) = "Agora eu mudei hehe";
  std::cout << "Segundo(DEPOIS): " << std::get<1>(terroo) << '\n';

  return 0;
}

Além de ser possível também concatenar tuplas com std::tuple_cat(tupla1, tupla2) entre outras funções, para isso recomendo ver o C++ Reference.


Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cppdaily cpp


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo

Artigos Relacionados




Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!