Russian Qt Forum
Ноябрь 01, 2024, 10:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: qStableSort - расположение своего функтора  (Прочитано 4613 раз)
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« : Май 06, 2015, 09:50 »

Помогите пожалуйста разобраться. В таком виде код работает:
Код
C++ (Qt)
#include "story.h"
 
bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
{
   return s1.toLower() < s2.toLower();
}
 
void Story::importFromClipboard(const QStringList &list)
{  
 qStableSort(list.begin(), list.end(), caseInsensitiveLessThan);
}

Если функтор пытаюсь сделать членом класса, story.h:
Код
C++ (Qt)
#include <QObject>
#include <QString>
#include <QStringList>
#include <QtAlgorithms>
 
class Story: public QObject
{
 Q_OBJECT
 
public:
 
...
 bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
 {
     return s1.toLower() < s2.toLower();
 }
...
 

Этот код не срабатывает:
Код
C++ (Qt)
#include "story.h"
 
void Story::importFromClipboard(const QStringList &list)
{  
 qStableSort(list.begin(), list.end(), caseInsensitiveLessThan);
}

Что не правильно делаю и как все таки верно оформить?
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Май 06, 2015, 10:55 »

что делать:
1) забыть про qStableSort и пользоватся std::stable_sort ;
2) понять что указатель на функцию не эквивалентен указателю на метод.
В связи с пунктом 2 или оставить функцию сравнения самосоятельной функцией,либо ознакомиться с std::bind и лямбдами.
Записан
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #2 : Май 06, 2015, 11:20 »

Спасибо! Основное уловил.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #3 : Май 06, 2015, 16:42 »

static модификатор в h-нике добавьте своей функции и будет вам счастье )
Записан
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #4 : Май 07, 2015, 05:53 »

Спасибо! Теперь все в полном порядке. И надеюсь окончательно осознал.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Май 07, 2015, 09:17 »

1) забыть про qStableSort и пользоватся std::stable_sort ;
Объясните почему? И чем лучше qSort (quick sort)? Судя по документации время сортировки у них одинаковое, сам не замерял.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Май 07, 2015, 12:24 »

Объясните почему? И чем лучше qSort (quick sort)?
Речь о qStableSort, а оно deprecated (и в букваре и в исходниках)

1) забыть ..
2) понять ..
... ознакомиться ..
Почему не "3) простить"  Непонимающий

Все-таки как это ужасно когда голова забита глупым std  Плачущий
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #7 : Май 07, 2015, 13:00 »

Цитировать
Все-таки как это ужасно когда голова забита глупым std   Плачущий
Возвёл очи к небу..
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Май 08, 2015, 09:33 »

Объясните почему? И чем лучше qSort (quick sort)? Судя по документации время сортировки у них одинаковое, сам не замерял.

Потому что в 2014м году компиляторы НАКОНЕЦ-ТО стали предоставлять более менее вменяемую версию stl и можно не тащить свои велосипеды. Так как сортировка инлайнится и не зависит от ABI stdlib, qSort и qStableSort теперь deprecated за ненадобностью.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.237 секунд. Запросов: 23.