C ++ Вставить результат перестановок в вектор - PullRequest
0 голосов
/ 06 мая 2018

Я сталкиваюсь с проблемой, что первый результат перестановки вводится в вектор, но на следующей итерации цикла for_each размер вектора сбрасывается до {size = 0} вместо увеличения его размера и вставки вторая перестановка и тд. Как мне обойти это? Я пытался использовать цикл while, но я не мог понять, каковы условия для него.

Я также хотел спросить, поскольку позже мне нужно будет сравнить значения в этом векторе с вектором, содержащим словарь, позволит ли мне текущий код (при правильной работе) сделать это.

Это мой код:

for_each(permutations.begin(), permutations.end(), [](string stringPermutations)
{
    vector<string> permutations;
    permutations.push_back(stringPermutations);
    cout << stringPermutations << endl;
});

Так что, похоже, лямбда всегда создает новый локальный вектор при каждом вызове. Если я помещу vector<string> permutations; вне лямбды, я получаю ошибку с permutations.push_back(stringPermutations);. Так как же мне извлечь stringPermutations из лямбды в общедоступный вектор?

Спасибо за помощь и отзывы.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Неясно, чего вы хотите достичь с помощью своего кода, но просто кажется, что вы хотите напечатать содержимое permutations. Тогда просто посмотрите на элементы в векторе.

for (auto &permutation : permutations) std::cout << permutation << '\n';

Вопрос в том, почему вы используете std::unordered_set<std::string>, а не std::vector<std::string> в первую очередь? тогда вам не нужно копировать элементы в новый вектор.

0 голосов
/ 06 мая 2018

Объявите вектор вне лямбды и используйте лямбда-захват , чтобы захватить этот вектор:

vector<string> permutation_v;
for_each(permutations.begin(), permutations.end(), [&](string stringPermutations)
                                                 // ^
{
    permutation_v.push_back(stringPermutations);
    cout << stringPermutations << endl;
});

Но на вашем месте я бы непосредственно построил этот вектор как

vector<string> permutation_v{permutations.begin(), permutations.end()};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...