Кратко:

Кортежи (tuples) в C++ — это контейнеры, которые могут содержать фиксированное количество элементов разных типов.

Синтаксис

#include <tuple>
 
std::tuple<int, double, std::string> t(1, 2.5, "example");

Свойства

  • Могут содержать элементы различных типов.
  • Поддерживают произвольное количество элементов.
  • Предоставляют доступ к элементам по индексу.
  • Могут быть сравнены, если все элементы поддерживают операторы сравнения.

Примеры кода

Создание и использование кортежей

#include <iostream>
#include <tuple>
#include <string>
 
int main() {
    // Создание кортежа
    std::tuple<int, double, std::string> t(1, 2.5, "example");
 
    // Доступ к элементам кортежа с использованием std::get
    std::cout << std::get<0>(t) << " "; // Output: 1
    std::cout << std::get<1>(t) << " "; // Output: 2.5
    std::cout << std::get<2>(t) << std::endl; // Output: example
 
    // Изменение значений элементов кортежа
    std::get<1>(t) = 3.5;
    std::cout << std::get<1>(t) << std::endl; // Output: 3.5
 
    return 0;
}

Разложение кортежа

#include <iostream>
#include <tuple>
#include <string>
 
int main() {
    std::tuple<int, double, std::string> t(1, 2.5, "example");
 
    // Разложение кортежа на переменные
    int i;
    double d;
    std::string s;
    std::tie(i, d, s) = t;
 
    std::cout << i << " " << d << " " << s << std::endl; // Output: 1 2.5 example
 
    return 0;
}

Использование std::make_tuple и std::tie

#include <iostream>
#include <tuple>
#include <string>
 
int main() {
    // Использование std::make_tuple для создания кортежа
    auto t = std::make_tuple(1, 2.5, "example");
 
    // Использование std::tie для разложения кортежа
    int i;
    double d;
    std::string s;
    std::tie(i, d, s) = t;
 
    std::cout << i << " " << d << " " << s << std::endl; // Output: 1 2.5 example
 
    return 0;
}

Применение кортежей в функциях

#include <iostream>
#include <tuple>
#include <string>
 
// Функция, возвращающая кортеж
std::tuple<int, double, std::string> getValues() {
    return std::make_tuple(1, 2.5, "example");
}
 
int main() {
    auto [i, d, s] = getValues();
 
    std::cout << i << " " << d << " " << s << std::endl; // Output: 1 2.5 example
 
    return 0;
}