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
Самое простое решение — поместить все исключенные слова в std::unordered_set
вместо std::vector
,
Затем вы можете использовать набор, чтобы проверить каждое слово в вашем списке слов, если оно должно быть исключено или нет. Таким образом, вам больше не нужно сортировать. Все, что вам нужно, это copy_if
и лямбда.
Простое решение не сортировать 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