gpt4 book ai didi

c++ - 如何总结std::set的元素

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:02 27 4
gpt4 key购买 nike

我正在尝试求集合中元素的总和,我想知道找到它的好方法是什么。我构建了两个类,一个称为 Customer,一个称为 Item,我想编写一个函数来计算客户需要为 Item 类型的 std::set 中列出的产品支付的总付款。这是我的集合的 declecation:

set<Item> _items;

类项目:

private:
string _name;
string _serialNumber; //consists of 5 numbers
int _count=0; //default is 1, can never be less than 1!
double _unitPrice; //always bigger than 0!

类 Item 中的函数,用于汇总商品的价格:

double Item :: totalPrice() const
{
return _count*_unitPrice;
}

这是我要编写的函数,它将对我的所有元素求和:

#include <numeric>
#include "Customer.h"
double Customer::totalSum() const
{
double sum = std::accumulate(_items.begin(), _items.end(), 0.0);
return sum;
}

但我得到这个错误:error C2893: Failed to specialize function template 'unknown-type std::plus<void>::operator ()(_Ty1 &&,_Ty2 &&) const'

重要说明:Customer 类已经包含了 Item 的标题。

编辑:添加了关于类项目的信息。

最佳答案

假设 Item 是这样的:

struct Item {
double price;
};

然后您可以使用以下内容:

auto add_item_price = [](double sum, const Item& item) {
return sum + item.price;
};

double sum = std::accumulate(_items.begin(), _items.end(), 0.0, add_item_price);

Here's a functional demo .

解释:

std::accumulate让您提供一个函数/仿函数来进行累加。我发布的代码使用 lambda function做积累。如果您不使用 C++11,则可以使用常规函数代替 lambda 函数。

避免为 Item 重载 operator+。添加两个 Item 没有多大意义。

关于c++ - 如何总结std::set的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831427/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com