У меня есть структура, определенная следующим образом:
struct IFSFunc {
int a;
bool operator<(const IFSFunc& other) {
return a < other.a;
}
};
Поскольку IFSfunc
является struct
, модификатор доступа для operator<
должен быть public
.
I также есть этот код:
#include <algorithm>
std::vector<std::pair<double, IFSFunc>> ifsFuncs;
// fill the vector with various data
std::sort(ifsFuncs.begin(), ifsFuncs.end());
Мне нужно отсортировать ifsFuncs на основе первого double
в паре. Меня не волнует структура IFSFunc
, если double
такой же.
Однако, для работы std :: sort, который определяется так:
template <class _Ty1, class _Ty2>
_NODISCARD constexpr bool operator<(const pair<_Ty1, _Ty2>& _Left, const pair<_Ty1, _Ty2>& _Right) {
return _Left.first < _Right.first || (!(_Right.first < _Left.first) && _Left.second < _Right.second);
}
Я должен переопределить оператор меньше чем для second
в этом случае IFSfunc
, что я и сделал. Тем не менее, попытка скомпилировать этот код дает мне следующую ошибку:
Error C2678 binary '<': no operator found which takes a left-hand operand of type 'const _Ty2' (or there is no acceptable conversion)
Почему?