У меня есть два кортежа, каждый из которых содержит контейнеры разных типов.Как сортировать два кортежа контейнеров?
std::tuple<containerA<typesA>...> tupleA;
std::tuple<containerB<typesB>...> tupleB;
Так, в качестве примера tupleA
может быть определена следующим образом:
std::tuple<list<int>, list<float>> tupleA;
двух контейнеров, containerA
и containerB
различные типы. typesA
и typesB
не пересекаются. Я хочу сортировать контейнеры внутри кортежей по их размерам и иметь доступ к ним по типу. Так, в качестве примера
std::tuple<list<int>, list<float>> tupleA {{2}, {3.3f, 4.2f}};
std::tuple<deque<double>, deque<uint8_t>> tupleB {{2.0, 1.2, 4.4}, {}};
auto sortedArray = sort(tupleA, tupleB);
sortedArray == {deque<uint8_t>, list<int>, list<float>, deque<double>};
sortedArray.get<list<float>>() == {3.3f, 4.2f};
std::get<list<int>>(tupleA).push_back(4);
std::get<list<int>>(tupleA).push_back(5);
std::get<list<int>>(tupleA).push_back(6);
sortedArray = sort(tupleA, tupleB);
sortedArray == {deque<uint8_t>, list<float>, deque<double>, list<int>};
Наиболее важной частью является то, что я должен хранить sortedArray
и размеры элементов в кортеже может измениться. Я не смог создать такую функцию sort
. Фактический синтаксис доступа к sortedArray
не важен.
Я попытался использовать наивные индексы для данных контейнера внутри sortedArray
, например, используя std::pair<A, 1>
, чтобы ссылаться на второй элемент в кортеже A, однако я не могу получить доступ к информации кортежа через него, потому что это не constexpr
Я не уверен, что это вполне возможно, так как кортеж типа, который должен быть известен во время компиляции, в то время как контейнеры внутри кортежа не constexpr контейнеров, и поэтому их элементы не будут известны до времени выполнения. – AndyG
@ArchbishopOfBanterbury Вы не можете 'std :: sort' кортеж, потому что их порядок неизменен. Для этого будет создан новый тип. – user975989
Ах, черт возьми, да, о чем я говорю, неважно. – ArchbishopOfBanterbury