crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> qSort и предикат сравнения ( LessThan lessThan )
Andrewshkovskii
  опции профиля:
сообщение 15.11.2009, 18:28
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


есть класс, в нем есть структура :
private :
        struct Cluster
         {
           private :
            int value_;
            QSet<int> numbersOfItems_;
            QPoint centerPos;
            bool isPainted;
           public :
            Cluster();
            Cluster(int item1 ,int item2, int nValue);
            Cluster(int item1, int nValue);
            void setValue(int newValue);
            int value(){ return value_; }
            QSet<int> &numbersOfItems() {return numbersOfItems_;}
            void setPainted(bool is);
            QString toString(QStringList * lst);
            void append(Cluster * nClust);
          };


и функция для сравнения :
 public :
        bool cmp(const Cluster&  c1, const Cluster& c2){return c1.value() > c2.value();}


и необходимо отсортировать вектор такой вот :
QVector <Cluster * > bufvec;

По возрастанию..
вот так вот пробую :
        
qSort(bufvec.begin(),bufvec.end(), cmp);

и получаю два :
Цитата
error: passing 'const Model::Cluster' as 'this' argument of 'int Model::Cluster::value()' discards qualifiers


Неужели надо будет в отдельный файл функцию запихивать?..

Сообщение отредактировал Andrewshkovskii - 15.11.2009, 18:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 15.11.2009, 18:38
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


1. сделай эту функцию static и передавай в qSort как Classname::cmp
2. ты сортируешь вектор указателей, а твоя функция сравнения принимает параметры-ссылки. сделай их тоже указателями.

Сообщение отредактировал Elfinit - 15.11.2009, 18:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 15.11.2009, 18:41
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


static bool cmp(const Cluster *c1, const Cluster *c2){return c1->value() > c2->value(); }

т.к. QVector содержит указатели на Cluster.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 15.11.2009, 18:53
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Спасибо, сказалась моя невнимательность:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 14:21