Блог пользователя utasoft.ru

Автор utasoft.ru, история, 5 лет назад, По-русски

Привет С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 <, но при сборке снова идут ошибки. Вообщем если кто сможет помочь, заранее благодарен.

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

если оператор внутри определения структуры, то достаточно одного параметра и содержание структуры сравнивается с содержанием структуры в параметре

»
5 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Оператор < определяется как bool operator<(const T& other) const;, не как bool operator<(const&, const&);.

  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Заработало,спасибо.

    • »
      »
      »
      5 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Можно еще так friend bool operator<(const A& p1, const A& p2) { ... }
      Или так как было изначально, bool operator<(const A& p1, const A& p2), но вынести это дело из структуры, чтоб компилятор распознал это как свободную функцию, а не метод структуры.