はコードです:С++:「無効なコンパレータ」を主張
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
2つの浮動小数点数を比較するのは良い考えではありません。浮動小数点数は正確には表現されません。あなたは、その差があるデルタよりも小さいことを比較する必要があります。フロートにお金を入れるのと同じ考え方では良い考えではありません。 –
@VTT:そうです、これが解決策です。それを答えさせて、私は受け入れます。 – deko