diff --git a/.gitignore b/.gitignore index 084ba12..605bb1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ cmake-build-*/ out/ +*.tmp diff --git a/stat_word.cpp b/stat_word.cpp index b264f06..1bf2cd8 100644 --- a/stat_word.cpp +++ b/stat_word.cpp @@ -30,13 +30,7 @@ void stat_word(const DataSource &source) { std::string lower = tolower(str); std::vector ret; for (auto const &word : word_list) - if (lower.find(word) != std::string::npos) ret.push_back(word); - return ret; - }; - - auto merge = [](auto const &l, auto const &r) { - std::vector ret = l; - ret.insert(ret.end(), r.begin(), r.end()); + if (lower.find(word) != std::string::npos) ret.emplace_back(word); return ret; }; @@ -48,11 +42,10 @@ void stat_word(const DataSource &source) { std::transform(std::execution::par, passwords_vec.begin(), passwords_vec.end(), words.begin(), eval); } { - timeit("merge results"); - result = std::reduce(std::execution::par, words.begin(), words.end(), std::vector{}, merge); + timeit("count results"); + for (auto const &word : words | std::views::join) stat[word]++; } - for (auto const &word : result) stat[word]++; std::vector> vec(stat.begin(), stat.end()); std::sort(vec.begin(), vec.end(), [](auto const &lhs, auto const &rhs) { return lhs.second > rhs.second; });