我只是想添加下面程序中定义的地图的值:
std::map<int, int> floor_plan;
const size_t distance = std::accumulate(std::begin(floor_plan), std::end(floor_plan), 0);
std::cout << "Total: " << distance;
我收到以下错误:
错误 C2893:无法专门化函数模板 ‘unknown-type std::plus::operator ()(_Ty1 &&,_Ty2 &&) const’
原文由 Daqs 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::begin(floor_plan)
给你一个指向std::map<int, int>::value_type
的迭代器,即std::pair<const int, int>
。由于没有为此对类型和整数定义operator+
,因此您的代码无法编译。选项1
如果您想总结
floor_plan
中的所有映射值,您需要提供自己的二元运算符,该运算符能够提取传入的取消引用迭代器的第二个元素:演示 1
选项#2
或者,您可以利用 Boost.Iterator 库使用
boost::make_transform_iterator
提取对的第二个元素:演示 2
选项#3
另一种方法是使用 Boost.Range 库以及它自己的
accumulate
算法实现:演示 3