У меня есть контейнер с элементами, и я использую два для< /code> выполняет цикл для поиска пар комбинаций.
Например, если у меня есть 10 элементов (a,b,c,d,e,f,g,h,i,j) , я хочу найти такие вещи, как группа {(a),(b,c,d,e,f,g,h,i)} и {(b,c),(a ,d,e,f,g,h,i,j). (эти буквы на самом деле являются кортежами)
nCr:
n фиксировано (например, 10)
Код: Выделить всё
for(cntr=1;cntr
Напоследок вот что-то вроде MWE. (вроде потому, что существуют определения функций, например print, которые могут помочь при отладке)
[code]#include
#include
#include
#include
#include
#include
#include
#include
// https://www.geeksforgeeks.org/2d-vector-of-tuples-in-c-with-examples/
typedef std::vector myvv;
typedef std::tuple mytuple;
typedef std::vector myvtuple;
typedef std::vector myvvtuple;
typedef std::vector myvvvtuple;
typedef std::vector< std::tuple< std::tuple, std::tuple > > myVTtt;
// https://stackoverflow.com/questions/6245735/pretty-print-stdtuple
#include
// https://www.gangofcoders.net/solution/creating-all-possible-k-combinations-of-n-items-in-c/
template std::vector getAllCombinations(const std::vector& inputVector, int k)
{
std::vector combinations;
std::vector selector(inputVector.size());
std::fill(selector.begin(), selector.begin() + k, 1);
do {
std::vector selectedIds;
std::vector selectedVectorElements;
for (long unsigned int i = 0; i < inputVector.size(); i++) {
if (selector[i]) {
selectedIds.push_back(i);
}
}
for (auto& id : selectedIds) {
selectedVectorElements.push_back(inputVector[id]);
}
combinations.push_back(selectedVectorElements);
} while (std::prev_permutation(selector.begin(), selector.end()));
return combinations;
}
// https://www.geeksforgeeks.org/2d-vector-of-tuples-in-c-with-examples/
// Function to print 2D vector elements
void print(std::vector& myContainer)
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78996476/parallelize-double-for-loop-construct-for-combinations-w-o-replacement[/url]