stat_word: seq faster than par
This commit is contained in:
parent
dfa26e7693
commit
17c4a49957
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
cmake-build-*/
|
||||
out/
|
||||
*.tmp
|
||||
|
@ -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; });
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user