stat_word: seq faster than par

This commit is contained in:
Paul Pan 2023-11-04 00:58:06 +08:00
parent dfa26e7693
commit 17c4a49957
2 changed files with 4 additions and 10 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
cmake-build-*/
out/
*.tmp

View File

@ -30,13 +30,7 @@ void stat_word(const DataSource &source) {
std::string lower = tolower(str);
std::vector<std::string> 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<std::string> 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<std::string>{}, merge);
timeit("count results");
for (auto const &word : words | std::views::join) stat[word]++;
}
for (auto const &word : result) stat[word]++;
std::vector<std::pair<std::string, size_t>> vec(stat.begin(), stat.end());
std::sort(vec.begin(), vec.end(), [](auto const &lhs, auto const &rhs) { return lhs.second > rhs.second; });