Quelle est la différence entre std :: lower_bound et std :: upper_bound?
Sep 25 2020
Le code ci-dessous ne se compile pas avec MSVC2017 et GCC11:
#include <deque>
#include <chrono>
#include <algorithm>
using Clock = std::chrono::system_clock;
using TimePoint = std::chrono::time_point<Clock>;
struct PricePoint
{
TimePoint dt;
double buy;
double sell;
};
inline bool operator < (const TimePoint & dt, const PricePoint & a)
{
return a.dt < dt;
}
int main()
{
std::deque<PricePoint> priceSequence;
const auto begin = std::lower_bound(priceSequence.begin(), priceSequence.end(), Clock::now());
return 0;
}
Mais si je remplace std::lower_boundpar std::upper_boundil commence à compiler. Quelle est la différence?
Réponses
9 NathanCooper Sep 25 2020 at 03:45
erreur: pas de correspondance pour 'opérateur <'
Ce type d'erreur suggère qu'un code de modèle essaie d'utiliser un opérateur que vous n'avez pas défini.
lower_boundet upper_boundfaites des comparaisons opposées. < (const TimePoint & dt, const PricePoint & a)convient upper_bound, mais lower_boundvous devez définir ceci:
inline bool operator < (const PricePoint & a, const TimePoint & dt)
{
return dt < a.dt;
}