Espacios de nombres
Variantes
Acciones

std::tuple

De cppreference.com
< cpp‎ | utility
 
 
Biblioteca de servicios
Servicios generales
Operadores relacionales (en desuso en C++20)
 
std::tuple
 
Definido en el archivo de encabezado <tuple>
template< class... Types >
class tuple;
(desde C++11)

La plantilla de clase std::tuple es una colección de tamaño fijo de valores heterogéneos. Es una generalización de std::pair.

Si (std::is_trivially_destructible_v<Types> && ...) es true, el destructor de tuple es trivial.

(desde C++17)

Contenido

[editar] Parámetros de plantilla

Types... - Los tipos de elementos que la tupla almacena. Se soporta una lista vacía.

[editar] Funciones miembro

Construye una nueva tupla
(función miembro pública)
Asigna el contenido de una tupla a otra.
(función miembro pública)
Intercambia el contenido de dos tuplas.
(función miembro pública)

[editar] Funciones no miembro

Crea un objeto de tupla del tipo definido por los tipos de argumentos.
(plantilla de función) [editar]
Crea una tupla de referencias lvalue o desempaca una tupla en objetos individuales.
(plantilla de función) [editar]
Crea una tupla de referencias r-valor.
(plantilla de función) [editar]
Crea una tupla mediante la concatenación de cualquier número de tuplas.
(plantilla de función) [editar]
La tupla accede al elemento especificado.
(plantilla de función) [editar]
Compara lexicográficamente los valores de la tupla
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]

[editar] Clases asistentes

Obtiene el tamaño de una tupla en tiempo de compilación.
(especialización de plantilla de clase) [editar]
Obtiene el tipo del elemento especificado.
(especialización de plantilla de clase) [editar]
Especializa el rasgo de tipo std::uses_allocator.
(especialización de plantilla de clase) [editar]
Marcador de posición para saltarse un elemento cuando se desempaca una tupla utilizando tie.
(constante) [editar]

[editar] Guías de deducción(desde C++17)

[editar] Notas

Hasta N4387 (aplicado como un informe de defecto de C++11), una función no podía devolver una tupla usando inicialización de lista de copia:

std::tuple<int, int> foo_tuple() 
{
  return {1, -1};  // ERROR hasta N4387
  return std::tuple<int, int>{1, -1}; // siempre funciona
  return std::make_tuple(1, -1); // siempre funciona
}

[editar] Ejemplo

#include <tuple>
#include <iostream>
#include <string>
#include <stdexcept>
 
std::tuple<double, char, std::string> captar_estudiante(int id)
{
    if (id == 0) return std::make_tuple(3.8, 'A', "Alicia Alderete");
    if (id == 1) return std::make_tuple(2.9, 'C', "Benito Barajas");
    if (id == 2) return std::make_tuple(1.7, 'D', "Carlos Cabello");
    throw std::invalid_argument("id");
}
 
int main()
{
    auto estudiante0 = captar_estudiante(0);
    std::cout << "ID: 0, "
              << "PROM: " << std::get<0>(estudiante0) << ", "
              << "calif: " << std::get<1>(estudiante0) << ", "
              << "nombre: " << std::get<2>(estudiante0) << '\n';
 
    double prom1;
    char calif1;
    std::string name1;
    std::tie(prom1, calif1, nombre1) = captar_estudiante(1);
    std::cout << "ID: 1, "
              << "PROM: " << prom1 << ", "
              << "calif: " << calif1 << ", "
              << "name: " << nombre1 << '\n';
 
    // C++17: vínculo estructurado
    auto [ prom2, calif2, nombre2 ] = captar_estudiante(2);
    std::cout << "ID: 2, "
              << "PROM: " << nombre << ", "
              << "calif: " << calif2 << ", "
              << "nombre: " << nombre2 << '\n';
}

Salida:

ID: 0, PROM: 3.8, calif: A, nombre: Alicia Alderete
ID: 1, PROM: 2.9, calif: C, nombre: Benito Barajas
ID: 2, PROM: 1.7, calif: D, nombre: Carlos Cabello

[editar] Referencias

  • El estándar C++17 (ISO/IEC 14882:2017):
  • 23.5 Tuples [tuple]
  • El estándar C++14 (ISO/IEC 14882:2014):
  • 20.4 Tuples [tuple]
  • El estándar C++11 (ISO/IEC 14882:2011):
  • 20.4 Tuples [tuple]