c++ - STL/ranges 算法计算加权平均值

标签 c++ stl weighted-average range-v3

假设我有一个成绩 vector ,其中成绩是

struct Grade{
   const int grade;
   const int ECTS; // weight
};

是否有 STL/range-v3 算法/算法可以让我做到这一点?

我知道我可以用 std::accumulate 来做,用一些奇特的类型作为累加器(记住权重的总和),但我正在寻找一个更简单的替代方案(如果存在的话)。

最佳答案

Grade 类型本身就足以充当累加器类型。

auto [grade_sum, ects] = std::accumulate(
    grages.begin(), grades.end(), Grade {0,0}, 
    [] (Grade acc, Grade g) -> Grade {
        return { g.grade*g.ECTS + acc.grade,
                 g.ECTS         + acc.ECTS  };
});
// auto average_grade = grade_sum/ects;

如有必要,C++17 结构化绑定(bind)可替换为 std::tie

关于c++ - STL/ranges 算法计算加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713723/

相关文章:

c++ - 使用 C++ STL 将 C 风格的字符串映射到 int?

r - 使用 tidyverse 和 sapply 在列表上创建一个函数

C++ 线程函数说明

c++ - 矩阵乘法中的段错误

c++ - 如何从 C++ 文件中读取以空格分隔的信息

c++ - minko - 无法编译 dev 分支

c++ - C++中简单迭代的list over map性能比较

c++ - 通过 const_cast 修改 const std::vector<T> 的元素

statistics - 如何计算加权测量值之间的标准偏差?

python - 在 Python 中,如何对四个随机数进行约束,使两个负数和两个正数等于 0?