Один подход использует std::accumulate
, например:
#include <numeric>
const int result = std::accumulate(f_table[1].cbegin(), f_table[1].cend(),
0, [](int result, const auto& entry){ return result + entry.second; });
Обратите внимание, что как @StoryTeller указал в комментариях, вы можете предпочесть параллельную версию этого алгоритма, которая будет поставляться с полностью соответствующими реализациями C ++ 17, то есть std::reduce
.
Другой вариант - диапазон, основанный на цикле. Со структурированными привязками (снова доступны в C ++ 17), вы можете считать это более читабельным:
int result = 0;
for (const auto& [key, value] : f_table[1])
result += value;
И, наконец, решение, основанное на range-v3 :
#include <range/v3/all.hpp>
using ranges::view::values;
using ranges::accumulate;
const int result = accumulate(f_table[1] | values, 0);