Привет Сodeforces!
Есть структура: struct A { public:
int widght; long delta; A(int a = 0) :delta(a) {} bool operator<(const A& p1, const A& p2) { return (p1.delta < p2.delta) && (p1.delta < p2.delta); } };
Пытаюсь посчитать кол-во структур в map<A,long>mii по ключу delta; A a; mii[a]++, Компиллятор выдает такою ошибку "error C2678: бинарный "<": не найден оператор, принимающий левый операнд типа". Полез в google, нашел решение — определить operator <, но при сборке снова идут ошибки. Вообщем если кто сможет помочь, заранее благодарен.
если оператор внутри определения структуры, то достаточно одного параметра и содержание структуры сравнивается с содержанием структуры в параметре
Оператор
<
определяется какbool operator<(const T& other) const;
, не какbool operator<(const&, const&);
.Заработало,спасибо.
Можно еще так
friend bool operator<(const A& p1, const A& p2) { ... }
Или так как было изначально,
bool operator<(const A& p1, const A& p2)
, но вынести это дело из структуры, чтоб компилятор распознал это как свободную функцию, а не метод структуры.