| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > STL не работает less со структурой |
| Автор: Познающий 2.6.2009, 12:15 |
| Доброго времени суток! Тут проблемка одна, нужно написать программу с использованием stl которая отображает таблицу чемпионата по футболу. В общем структура есть, но проблема в том, что критерий отборки должен быть именно less. Я написал свой критерий Cless но препод этого не примет просто. Вот сама прога #include <iostream> #include <vector> #include <functional> #include <fstream> #include <algorithm> #include <queue> using namespace std; struct Fteam{ int goal; char* name; friend ostream operator <<(ostream&out,Fteam a){ out<<a.name<<" "<<a.goal; return out; } friend istream operator >>(istream&in,Fteam a){ in>>a.goal; in>>a.name; return in; } bool operator<(Fteam&right){ return (goal<right.goal);// return false; //else return true; } Fteam(int g,char*nm){ goal=g; name=nm; } bool operator() (Fteam x,Fteam y){ return (x<y); } Fteam(){name=0;goal=0;} }; }; void main(){ Fteam a(1,"one"); priority_queue <Fteam,vector<Fteam>,less<Fteam> > q; q.push(a); int cnt=1; do{ a=q.top(); cout<<cnt<<" place is "<<a<<"\n";cnt++; q.pop(); }while ( !q.empty() ); } Вот... Ругается виз 6,0 на оператор < и вроде бы как на () include\functional(86) : error C2678: binary '<' : no operator defined which takes a left-hand operand of type 'const struct Fteam' (or there is no acceptable conversion) \functional(86) : while compiling class-template member function 'bool __thiscall std::less<struct Fteam>::operator ()(const struct Fteam &,const struct Fteam &) const' Люди, поясните, что не так |
| Автор: azesmcar 2.6.2009, 12:25 | ||
| мутно как-то все.. свой less писать не надо, просто специализировать и все вот так
|
| Автор: Познающий 2.6.2009, 12:52 | ||||
Работает!!
))) ё-моё) это я еще кое-что выкинул из кода )) Ну там...пару закоментированных перегруженных операторов... Вот, думаю, как отточить стиль правильного и красивого программирования)) А то видел у одногрупника код, такая красота))
А можно тут поподробнее?))) Как у компилятора не возник вопрос касательно пустых скобок шаблона? И как сработала вторая строчка? Я вызывал стд, он выдал автоматом две переменные что у меня есть. Просто я не совсем понял. То есть эта запись означает : Пространство - структура, (: |
| Автор: Lazin 2.6.2009, 14:14 | ||
специализировать ничего не нужно, нужно правильно реализовать оператор < для своего класса
|
| Автор: azesmcar 2.6.2009, 14:27 | ||
это уже не ко мне, это к топикстартеру |
| Автор: mes 2.6.2009, 14:47 | ||
если есть оператор < то можно без проблем использовать less. |
| Автор: azesmcar 2.6.2009, 14:52 | ||
| mes а кто-то спорит? тс попросил less, я его дал так чтобы он работал тема называется
|
| Автор: Познающий 2.6.2009, 15:03 |
| не)) я как раз перегружал, ведь оператор меньше)) Всё с того и началось) |
| Автор: azesmcar 2.6.2009, 15:09 | ||||
| Познающий С константами намудрил
вот рабочий пример, дорабатывайте с операторами тоже сильно намудрено Добавлено @ 15:17 Познающий
вот, немного исправил, жить будет, но желательно чтоб недолго |