#c
#c
Вопрос:
Приведенный ниже код не компилируется как с MSVC2017, так и с 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 amp; dt, const PricePoint amp; 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;
}
Но если я заменю std::lower_bound
на std::upper_bound
него, он начнет компилироваться. В чем разница?
Ответ №1:
ошибка: нет совпадения для ‘operator<‘
Такого рода ошибки предполагают, что какой-то код шаблона пытается использовать оператор, который вы не определили.
lower_bound
и upper_bound
делайте противоположные сравнения. < (const TimePoint amp; dt, const PricePoint amp; a)
подходит для upper_bound
, но lower_bound
требует, чтобы вы определили это:
inline bool operator < (const PricePoint amp; a, const TimePoint amp; dt)
{
return dt < a.dt;
}