Предоставляет ли C ++ тройной шаблон, сравнимый с парой ‹T1, T2›?

Есть ли в C ++ что-нибудь вроде std :: pair, но с тремя элементами?

Например:

#include <triple.h>
triple<int, int, int> array[10];

array[1].first = 1;
array[1].second = 2;
array[1].third = 3;

person user3432317    schedule 13.05.2014    source источник
comment
Этот дубликат стоит сохранить; его не следует удалять.   -  person Raedwald    schedule 03.09.2019


Ответы (4)


Возможно, вы ищете std::tuple:

#include <tuple>

....

std::tuple<int, int, int> tpl;

std::get<0>(tpl) = 1;
std::get<1>(tpl) = 2;
std::get<2>(tpl) = 3;
person juanchopanza    schedule 13.05.2014
comment
Я считаю, что у std::tuple есть огромный недостаток! К нему нельзя получить доступ по индексу. Если все типы одинаковы, вероятно, лучше будет std::array<3>. - person Sven; 28.08.2020

Шаблон класса std::tuple - это набор разнородных значений фиксированного размера, доступный в стандартной библиотеке, начиная с C ++ 11. Это обобщение std::pair и представлено в заголовке

#include <tuple>

Об этом можно прочитать здесь:

http://en.cppreference.com/w/cpp/utility/tuple

Пример:

#include <tuple>

std::tuple<int, int, int> three;

std::get<0>( three) = 0;
std::get<1>( three) = 1;
std::get<2>( three) = 2;
person 4pie0    schedule 13.05.2014

Нет, нет.

Однако вы можете использовать кортеж или «двойную пару» (pair<pair<T1,T2>,T3>). Или - очевидно - напишите класс самостоятельно (что не должно быть сложно).

person Paweł Stawarz    schedule 13.05.2014

Есть только 2 простых способа получить это. 1) Реализовать самому. 2) получить повышение и использовать boost :: tuple http://www.boost.org/doc/libs/1_55_0/libs/tuple/doc/tuple_users_guide.html как это

double d = 2.7; A a;
tuple<int, double&, const A&> t(1, d, a);
const tuple<int, double&, const A&> ct = t;
  ...
int i = get<0>(t); i = t.get<0>();       
int j = get<0>(ct);                      
get<0>(t) = 5;                           
person treshaque    schedule 13.05.2014
comment
В C ++ 11 есть std::tuple. - person Fred Larson; 13.05.2014