| 88 | |
| 89 | template <typename T, typename Field> |
| 90 | double calculate_std_dev_field(std::vector<T> &values, Field T::*field, const double mean) |
| 91 | { |
| 92 | double res = std::transform_reduce( |
| 93 | OPT_EXEC_POLICY |
| 94 | values.begin(), |
| 95 | values.end(), |
| 96 | 0.0, |
| 97 | std::plus<>(), |
| 98 | [mean, field](const T &v) |
| 99 | { |
| 100 | return std::pow(static_cast<double>(v.*field) - mean, 2); |
| 101 | }); |
| 102 | |
| 103 | return sqrt(res / values.size()); |
| 104 | } |
| 105 | |
| 106 | template <typename T, typename Field> |
| 107 | auto get_distinct_field_values(const std::vector<const T *> &vec, Field T::*field) |