На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Множество set из пользовательских объектов
    Всем хай!
    Сразу к делу.
    Есть такая структура, описывающая точку на плоскости:
    ExpandedWrap disabled
      struct Tpoint
      {
          int x;
          int y;
          Tpoint(int px, int py)
          {
              x = px;
              y = py;
          }
          bool Tpoint::operator<(Tpoint p)
          {
              if(p.x + p.y < x + y)
                  return true;
              else
                  return false;
          }
      // еще перегрузка стоит на <=, >, >=, != , ==
      };


    И вот создаю в main множество:
    ExpandedWrap disabled
          set<Tpoint> s;
          Tpoint p1(3, 4);
          s.insert(p1);

    Компиляция не проходит, ругается на s.insert(p1);
    Чего тут нужно еще дописывать, чтобы он смог добавить элемент-точку в множество?

    Добавлено
    P.S. просьба удалить тему-дубликат (что-то при создании проглючило)
    M
    Готово
    Сообщение отредактировано: JoeUser -
      ExpandedWrap disabled
        bool operator<(const Tpoint& p) const
        {
            return (p.x + p.y < x + y);
        }


      Добавлено
      Цитата FasterHarder @
      чтобы он смог добавить элемент-точку в множество?

      insert добавляет элемент по константой ссылке, а у тебя оператор неконстантен, еще и объявлен неправильно.

      Добавлено
      Ну и да, чисто математически сравнивать x + y неверно. Это даст одинаковый результат для, например, для [1, 0] и [0, 1].
      Сообщение отредактировано: shm -
        Цитата shm @
        Ну и да, чисто математически сравнивать x + y неверно. Это даст одинаковый результат для, например, для [1, 0] и [0, 1].


        Тут надо определиться по какому критерию нужно упорядочивать точки. Что вообще x + y означает математически?
        Может там надо что-то типа (x == p.x? y < p.y: x < p.x)?
          В сравнении на МЕНЬШЕ абсолютно ПО БАРАБАНУ, что стоит там сейчас, т к проблема была в insert(), а не с логикой реализации "<"!
            Согласен, похоже, надо добавить конструктор копирования
              Цитата Олег М @
              надо добавить конструктор копирования

              Не нужен он тут.
                Цитата FasterHarder @
                проблема была в insert(), а не с логикой реализации "<"!

                точнее в const оператора operator<? как сказал shm :)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0263 ]   [ 17 queries used ]   [ Generated: 26.04.24, 11:04 GMT ]