Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> STL не работает less со структурой, не получается реализовать less...:( 
:(
    Опции темы
Познающий
  Дата 2.6.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2009

Репутация: нет
Всего: нет



Доброго времени суток!
Тут проблемка одна, нужно написать программу с использованием 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'
Люди, поясните, что не так  smile 



PM MAIL   Вверх
azesmcar
Дата 2.6.2009, 12:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



мутно как-то все..
свой less писать не надо, просто специализировать и все
вот так
Код

struct mystruct
{
    int a;
};

template <>
struct std::less<mystruct>
{
    bool operator ()(const mystruct& l, const mystruct& r) const {
        return l.a < r.a;
    }
};

PM   Вверх
Познающий
  Дата 2.6.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2009

Репутация: нет
Всего: нет



Работает!! smile 
Цитата

мутно как-то все..


))) ё-моё) это я еще кое-что выкинул из кода ))
Ну там...пару закоментированных перегруженных операторов...
Вот, думаю, как отточить стиль правильного и красивого программирования)) А то видел у одногрупника код, такая красота))

Код

template <>
struct std::less<mystruct>


А можно тут поподробнее?)))
Как у компилятора не возник вопрос касательно пустых скобок шаблона?
И как сработала вторая строчка?
Я вызывал стд, он выдал автоматом две переменные что у меня есть. Просто я не совсем понял. 
То есть эта запись означает : Пространство - структура, (:smile а там используется less... так чтоли?)

PM MAIL   Вверх
zim22
Дата 2.6.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Познающий @  2.6.2009,  12:52 Найти цитируемый пост)
Как у компилятора не возник вопрос касательно пустых скобок шаблона?

это называется специализация шаблона. для этого и указываются пустые скобки.
хотите освоить шаблоны - прочитайте Вандевурда Шаблоны С++ Справочник разработчика smile


--------------------
PM MAIL   Вверх
Lazin
Дата 2.6.2009, 14:14 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(azesmcar @  2.6.2009,  12:25 Найти цитируемый пост)
просто специализировать и все

специализировать ничего не нужно, нужно правильно реализовать оператор < для своего класса smile 

Код

bool operator < (Fteam const& right)
const {
    return goal < right.goal;
}

PM MAIL Skype GTalk   Вверх
azesmcar
Дата 2.6.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Lazin @  2.6.2009,  14:14 Найти цитируемый пост)
специализировать ничего не нужно, нужно правильно реализовать оператор < для своего класса smile 

это уже не ко мне, это к топикстартеру
Цитата(Познающий @  2.6.2009,  12:15 Найти цитируемый пост)
должен быть именно less


PM   Вверх
mes
Дата 2.6.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Lazin @  2.6.2009,  13:14 Найти цитируемый пост)
специализировать ничего не нужно, нужно правильно реализовать оператор < для своего класса smile 

Цитата(azesmcar @  2.6.2009,  13:27 Найти цитируемый пост)
это уже не ко мне, это к топикстартеру

если есть оператор <  то можно без проблем использовать less. smile



--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 2.6.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



mes

а кто-то спорит? тс попросил less, я его дал так чтобы он работал smile 
тема называется
Цитата

не получается реализовать less



Это сообщение отредактировал(а) azesmcar - 2.6.2009, 14:54
PM   Вверх
Познающий
Дата 2.6.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2009

Репутация: нет
Всего: нет



не)) я как раз перегружал, ведь оператор меньше))
Всё с того и началось)
PM MAIL   Вверх
azesmcar
Дата 2.6.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Познающий

С константами намудрил
Код

struct mystruct {
    int i;

    bool operator<(const mystruct& right) const {
        return i < right.i;
    }
};

int main(){
    priority_queue <mystruct, vector<mystruct> > q;
}

вот рабочий пример, дорабатывайте

с операторами тоже сильно намудрено smile

Добавлено @ 15:17
Познающий

Код

#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&, const Fteam&);
    friend istream& operator >> (istream&, Fteam&);

    bool operator<(const Fteam&right) const {
        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;}

};

ostream& operator << (ostream& out, const Fteam& a)
{
    out << a.name << " " << a.goal;
    return out;
}

istream& operator >> (istream& inp, Fteam& a)
{
    inp >> a.goal >> a.name;
    return inp;
}

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() );
}

вот, немного исправил, жить будет, но желательно чтоб недолго smile 

Это сообщение отредактировал(а) azesmcar - 2.6.2009, 15:20
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1137 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.