How to sum all values in the std::map?
c++, dictionary, std
Solution
You can do this with a lambda and `std::accumulate`. Note you need an up to date compiler (at least MSVC 2010, Clang 3.1 or GCC 4.6):
#include <numeric>
#include <iostream>
#include <map>
#include <string>
int main()
{
const std::map<std::string, std::size_t> bla = {{"a", 1}, {"b", 3}};
const std::size_t result = std::accumulate(
std::begin(bla),
std::end(bla),
0, // initial value of the sum
[](const std::size_t previous, const std::pair<const std::string, std::size_t>& p)
{ return previous + p.second; }
);
std::cout << result << "\n";
}
Live example here.
If you use C++14, you can improve the readability of the lambda by using a generic lambda instead:
[](const std::size_t previous, const auto& element)
{ return previous + element.second; }
Problem
How to sum all values in `std::map<std::string, size_t>` collection without using for loop? The map resides as private member in a class. Accumulation is performed in public function call. I do not want to use boost or other 3rd parties.