下面是代码:С++:“无效比较”断言
struct Payment
{
Payment(time_t time, float money) : mTime(time), mMoney(money) {}
bool operator==(const Payment& p) const // exact comparison
{
return mTime == p.mTime && mMoney == p.mMoney;
}
time_t mTime;
float mMoney;
};
std::vector<Payment> payments;
auto sortP = [](const Payment& p1, const Payment& p2) { return p1.mTime < p2.mTime || p1.mMoney <= p2.mMoney; };
std::sort(payments.begin(), payments.end(), sortP);
std::sort
(并不总是,但有时,当两个彼此接近的元素mTime
)引起无效比较在Visual Studio 2015断言。代码有什么问题?
'|| p1.mMoney <= p2.mMoney'应该是'|| ((p1.mTime == p2.mTime)&&(p1.mMoney
VTT
比较两个浮动并不是一个好主意,浮动并不完全代表,它们是近似值。您需要比较差异小于一些三角洲。按照同样的理由把钱存入浮动并不是一个好主意。 –
@VTT:你说得对,这是解决方案。让它成为答案,我会接受。 – deko