Hier ist der Code:С ++: „ungültig Komparator“ behaupten
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
(nicht immer, aber manchmal, wenn mTime
von zwei Elementen nahe beieinander) ungültig Komparator hebt in Visual Studio 2015 behaupten Was stimmt nicht mit dem Code?
'|| p1.mMoney <= p2.mMoney' sollte '|| sein ((p1.mTime == p2.mTime) && (p1.mMoney
VTT
Vergleichen von zwei Floats ist keine gute Idee, Floats sind nicht genau dargestellt, sie sind Annäherungen. Sie müssen vergleichen, dass die Differenz weniger als ein Delta ist. Aus demselben Grund ist es auch keine gute Idee, Geld in einen Float zu stecken. –
@ VTT: Sie haben Recht, das ist die Lösung. Mach es eine Antwort, ich werde es akzeptieren. – deko