下面是代碼:С++:「無效比較」斷言
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