Ваша проблема связана с функцией summ, вам на самом деле нужно что-то лучшее, чтобы справиться с двумя несовпадающими типами.
Если вам повезет, это может сработать:
int summ(int x, buf_map::value_type const& v) { return x + v.second; }
Если вам не повезло (в зависимости от того, как реализовано accumulate
), вы всегда можете:
struct Summer
{
typedef buf_map::value_type const& s_type;
int operator()(int x, s_type v) const { return x + v.second.first; }
int operator()(s_type v, int x) const { return x + v.second.first; }
};
И затем использовать:
int result = std::accumulate(map.begin(), map.end(), 0, Summer());