wordDiff должен возвращать массив строк со словом в s, которые не находятся в t, в порядке их появления в s

using namespace std;
vector<string> wordDiff(string s, string t)
{
istringstream parse_s(s);
vector<string> words_s(istream_iterator<string>(parse_s), {});

istringstream parse_t(t);
vector<string> words_t(istream_iterator<string>(parse_t), {});

sort(words_s.begin(), words_s.end());
sort(words_t.begin(), words_t.end());

vector<string> funk;
set_difference(words_s.begin(), words_s.end(),
words_t.begin(), words_t.end(),
back_inserter(ret));
return funk;
}

до сих пор я могу получить массив строк со словами в s, которые не являются с set_difference, однако я не могу получить массив в порядке s

-1

Решение

Самое простое решение — поместить все исключенные слова в std::unordered_set вместо std::vector,

Затем вы можете использовать набор, чтобы проверить каждое слово в вашем списке слов, если оно должно быть исключено или нет. Таким образом, вам больше не нужно сортировать. Все, что вам нужно, это copy_if и лямбда.

0

Другие решения

Простое решение не сортировать words_s (только words_t) и использовать std::remove_if:

  sort(words_t.begin(), words_t.end());

auto it = std::remove_if( words_s.begin(), words_s.end(), [words_t]( const std::string &str ) {
return std::find( words_t.begin(), words_t.end(), str ) != words_t.end() );
} );
words_s.erase( it, words_s.end() );

Вы можете рассмотреть возможность использования std::unordered_set вместо отсортированного вектора для words_t

0

По вопросам рекламы [email protected]