使用 STL 算法快速提前终止

Express early termination with STL algorithms

我正在尝试将代码中的一些循环重写为标准库函数。以下代码段似乎遵循提前终止的一般模型,我想知道如何在没有显式循环的情况下表达它?

auto sum = 0;
for (const string& key : keys) {
    if (my_map.find(key) == my_map.end())
        return nullptr;

    sum += my_map[key];
}
return make_unique<int>(sum);

这是一种可能的方法:将 sum 计算为提前终止算法的副作用。例如

int sum = 0;
auto f = std::find_if(keys.begin(), keys.end(), [&](string const &key) {
                      if (my_map.find(key) == my_map.end())
                          return true;
                      sum += my_map[key];
});

return f == keys.end() ? make_unique(sum) : nullptr;