Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.131.168] |
|
Сообщ.
#1
,
|
|
|
Всем хай!
Сразу к делу. Есть такая структура, описывающая точку на плоскости: 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 множество: set<Tpoint> s; Tpoint p1(3, 4); s.insert(p1); Компиляция не проходит, ругается на s.insert(p1); Чего тут нужно еще дописывать, чтобы он смог добавить элемент-точку в множество? Добавлено P.S. просьба удалить тему-дубликат (что-то при создании проглючило) M Готово |
Сообщ.
#2
,
|
|
|
bool operator<(const Tpoint& p) const { return (p.x + p.y < x + y); } Добавлено Цитата FasterHarder @ чтобы он смог добавить элемент-точку в множество? insert добавляет элемент по константой ссылке, а у тебя оператор неконстантен, еще и объявлен неправильно. Добавлено Ну и да, чисто математически сравнивать x + y неверно. Это даст одинаковый результат для, например, для [1, 0] и [0, 1]. |
Сообщ.
#3
,
|
|
|
Цитата shm @ Ну и да, чисто математически сравнивать x + y неверно. Это даст одинаковый результат для, например, для [1, 0] и [0, 1]. Тут надо определиться по какому критерию нужно упорядочивать точки. Что вообще x + y означает математически? Может там надо что-то типа (x == p.x? y < p.y: x < p.x)? |
Сообщ.
#4
,
|
|
|
В сравнении на МЕНЬШЕ абсолютно ПО БАРАБАНУ, что стоит там сейчас, т к проблема была в insert(), а не с логикой реализации "<"!
|
Сообщ.
#5
,
|
|
|
Согласен, похоже, надо добавить конструктор копирования
|
Сообщ.
#6
,
|
|
|
Цитата Олег М @ надо добавить конструктор копирования Не нужен он тут. |
Сообщ.
#7
,
|
|
|
Цитата FasterHarder @ проблема была в insert(), а не с логикой реализации "<"! точнее в const оператора operator<? как сказал shm |