作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对于像 std::map 这样的映射,我如何计算它的值总和?
实际上,我是用仿函数和 std::for_each 算法实现的。但我也想使用 std::accumulate 算法来实现。
我不知道如何将它应用到 std::map。
这可能吗?
struct Accumurator
: std::unary_function<std::pair<int, int>, void>
{
Accumurator()
: totalValue_(0)
{
}
void operator()(const std::pair<int, int>& p)
{
totalValue_ += p.second;
}
int result() const
{
return totalValue_;
}
int totalValue_;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::map<int, int> m;
m.insert(make_pair(1, 10));
m.insert(make_pair(2, 10));
m.insert(make_pair(3, 10));
m.insert(make_pair(4, 10));
m.insert(make_pair(5, 10));
m.insert(make_pair(6, 10));
int totalSum = std::for_each(m.begin(), m.end(), Accumurator()).result();
// How can I apply accumulate algorithm for associative containers.
// int totalSum = accumulate(m.begin(), m.end(), ???);
return 0;
}
最佳答案
差不多。仿函数必须是二元运算符,第一个参数是返回值类型,第二个参数是范围类型:
x = Functor(init, *it++);
x = Functor(x, *it++);
x = Functor(x, *it++);
// ... until it == end
所以你根本不需要有状态的仿函数,一个简单的函数就可以了:
int map_acc(int lhs, const std::pair<int, int> & rhs)
{
return lhs + rhs.second;
}
const int sum = std::accumulate(m.begin(), m.end(), 0, map_acc);
关于c++ - 如何为关联容器应用 std::accumulate 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6935118/
我是一名优秀的程序员,十分优秀!