cpp-que-son-tuplas

Qué son y cómo usar las tuplas en C++

En C++ una tupla es una estructura de datos que permite agrupar múltiples valores de diferentes tipos en una sola variable.

A diferencia de las clases o estructuras (struct), las tuplas son más simples y están diseñadas para manejar conjuntos de datos de diferentes tipos sin necesidad de definir una nuevo tipo.

Las tuplas en C++ son inmutables, lo que significa que, una vez creadas, sus valores no pueden ser modificados. Esta característica las hace ideales para representar agrupaciones de datos que no necesitan cambiar una vez definidas.

Sintaxis de las tuplas

Las tuplas se definen y utilizan a través de la clase std::tuple del estándar de la biblioteca C++.

#include <tuple>

std::tuple<tipo1, tipo2> tupla = std::make_tuple(valor1, valor2);
  • tipo1, tipo2: Son los tipos de datos de los elementos de la tupla.
  • valor1, valor2: Son los valores que se asignan a los elementos de la tupla.

Es posible crear una tupla con cualquier número de elementos (aunque no es recomendable hacer tuplas extremadamente largas para mantener la claridad del código)

#include <tuple>

std::tuple<int, std::string, double> miTupla = std::make_tuple(1, "Hola", 3.14);

Ejemplo básico

Veamos un ejemplo sencillo para definir y utilizar una tupla en C++:

#include <iostream>
#include <tuple>

int main() {
    std::tuple<int, std::string, double> miTupla = std::make_tuple(1, "Hola", 3.14);

    // Acceso a los elementos
    int entero = std::get<0>(miTupla);
    std::string texto = std::get<1>(miTupla);
    double numero = std::get<2>(miTupla);

    std::cout << "Entero: " << entero << std::endl; // Imprime "Entero: 1"
    std::cout << "Texto: " << texto << std::endl;   // Imprime "Texto: Hola"
    std::cout << "Número: " << numero << std::endl; // Imprime "Número: 3.14"

    return 0;
}

Uso básico

Acceso a los elementos de la tupla

Para acceder a los elementos de una tupla, se utiliza la función std::get<N>(tupla), donde N es el índice del elemento que queremos obtener (empezando desde 0).

std::tuple<int, std::string, bool> tupla = std::make_tuple(1, "Hola", true);

int numero = std::get<0>(tupla);   // Obtiene el primer elemento
std::string texto = std::get<1>(tupla); // Obtiene el segundo elemento
bool valorBooleano = std::get<2>(tupla); // Obtiene el tercer elemento

Destructuración de tuplas

Aunque C++ no tiene destructuración directa para tuplas como otros lenguajes, puedes utilizar std::tie para descomponer una tupla en variables separadas.

#include <iostream>
#include <tuple>

int main() {
    std::tuple<int, std::string, double> tupla = std::make_tuple(1, "Hola", 3.14);

    int entero;
    std::string texto;
    double numero;

    std::tie(entero, texto, numero) = tupla;

    std::cout << "Entero: " << entero << std::endl;
    std::cout << "Texto: " << texto << std::endl;
    std::cout << "Número: " << numero << std::endl;

    return 0;
}

Ejemplos prácticos