Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ qSort и предикат сравнения ( LessThan lessThan )

Автор: Andrewshkovskii 15.11.2009, 18:28

есть класс, в нем есть структура :

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


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

Автор: Elfinit 15.11.2009, 18:38

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

Автор: DEADHUNT 15.11.2009, 18:41

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

т.к. QVector содержит указатели на Cluster.

Автор: Andrewshkovskii 15.11.2009, 18:53

Спасибо, сказалась моя невнимательность:)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)