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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Сортировка коллекции объектов  (Прочитано 6394 раз)
Yegor
Гость
« : Октябрь 17, 2016, 14:59 »

Всем здравствуйте!

У меня есть коллекция объектов. Храню ее так: QList<MyClass*>
То есть список из указателей на объекты.
И мне нужно отсортировать этот список объектов, по времени.

Заголовок класса:
Код
C++ (Qt)
class MyClass
{
public:
   // Override of 'operator <'. Need for sorting algorithm.
   bool operator<(const MyClass & other)
   {
       return ( this->dateTime < other.dateTime );
   }
private:
   QDateTime dateTime; // Criterion of the sorting.
};
 

В Qt Assistant нашел способ сортировки списка QList:
QList<T> list;
Код
C++ (Qt)
qSort ( list.begin(), list.end() );

Но вот только в таком коде за T берется значение, к которому применяется 'operator <' к указателю на объект, а не к самому объекту. А у меня же список с указателями на объекты. И тогда qSort будет сортировать содержимое QList согласно значения указателей (номер адреса памяти), и не будет переходить на объекты по указателям и применять к самим объектам 'operator <'.

Вопрос, как научить алгоритм сортировки переходить по указателям на объекты, чтобы отсортировать их по их дате-времени?
Спасибо!
« Последнее редактирование: Октябрь 18, 2016, 12:35 от Yegor » Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #1 : Октябрь 17, 2016, 15:15 »

использовать, например, stable_sort, в этой функции можно указать свой способ сравнения.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Октябрь 17, 2016, 15:28 »

В Qt Assistant нашел способ сортировки списка QList:
QList<T> list;
Код
C++ (Qt)
qSort ( list.begin(), list.end() );

Там есть ещё один
Код
C++ (Qt)
void qSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Октябрь 18, 2016, 06:27 »

Можно и std::sort, только тоже с функтором. И еще
   bool operator<(const MyClass & other) const
Записан
Yegor
Гость
« Ответ #4 : Октябрь 18, 2016, 12:35 »

Цитировать
Там есть ещё один
Код
C++ (Qt)
Код
C++ (Qt)
void qSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)

То есть можно сделать функцию для сравнения (LessThan lessThan), и подставить ее в функцию qSort в качестве третьего аргумента.

Спасибо большое, GreatSnake!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Октябрь 18, 2016, 12:52 »

То есть можно сделать функцию для сравнения (LessThan lessThan), и подставить ее в функцию qSort в качестве третьего аргумента.
Да, а ещё лучше лямбду, если используешь C++11.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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