Неуважительное намерение, но вы задаете самые запутанные вопросы.Мне пришлось выкопать ваш предыдущий вопрос, чтобы понять его немного лучше, и я не уверен, понял ли я также предыдущий вопрос.
Изначально у меня есть 4 входа C1, C2, C3, C4,Это означает, что у меня всего 16 комбинаций:
0000 0001.,,1111
Как я могу автоматизировать этот процесс, когда размер C изменяется [...]
Обычно самый простой способ - написать вложенные циклы для генерации комбинаций (я знаю,это не то, что вы хотите, продолжайте читать):
for (int a=0; a < 2; ++a)
{
for (int b=0; b < 2; ++b)
{
for (int c=0; c < 2; ++c)
{
for (int d=0; d < 2; ++d)
{
// I'm just printing the values here but
// you could insert them to a container if
// you want.
cout << a << b << c << d << endl;
}
}
}
}
Однако, если вы не можете определить количество вложенных циклов, нам нужно написать заранее (например: если размер C основандля условий выполнения), затем рассмотрите рекурсивное решение для генерации комбинаций.
void generate_combinations(int depth, int max_depth, string str)
{
if (depth < max_depth)
{
generate_combinations(depth + 1, max_depth, str + "0");
generate_combinations(depth + 1, max_depth, str + "1");
}
else
cout << str << " ";
}
int main()
{
generate_combinations(0, 3, "");
}
Это приводит к:
000 001 010 011 100 101 110 111
При этом:
generate_combinations(0, 4, "");
Выходы:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
... и так далее.Вы можете управлять C любым удобным для вас образом, основываясь на условиях выполнения, и очень легко.
Кроме того, что предпочитает вектор с этими значениями или добавить это в пару внутри мультикарты?Время поиска вектора меньше, чем в мультикарте.
Если ваши данные плотные (например, индексы в диапазоне от 0 до N без пробелов), то нет необходимости использовать карту с ключами int.Использование карты со встроенными ключами полезно только в том случае, если данные, которые вы хотите представить, являются разреженными.В противном случае рассмотрим std :: vector или std :: deque.