Russian Qt Forum

Qt => Общие вопросы => Тема начата: Yegor от Октябрь 17, 2016, 14:59



Название: [РЕШЕНО] Сортировка коллекции объектов
Отправлено: 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 <'.

Вопрос, как научить алгоритм сортировки переходить по указателям на объекты, чтобы отсортировать их по их дате-времени?
Спасибо!


Название: Re: Сортировка коллекции объектов
Отправлено: Johnik от Октябрь 17, 2016, 15:15
использовать, например, stable_sort (http://en.cppreference.com/w/cpp/algorithm/stable_sort), в этой функции можно указать свой способ сравнения.


Название: Re: Сортировка коллекции объектов
Отправлено: GreatSnake от Октябрь 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)


Название: Re: Сортировка коллекции объектов
Отправлено: Igors от Октябрь 18, 2016, 06:27
Можно и std::sort, только тоже с функтором. И еще
   bool operator<(const MyClass & other) const


Название: Re: Сортировка коллекции объектов
Отправлено: Yegor от Октябрь 18, 2016, 12:35
Цитировать
Там есть ещё один
Код
C++ (Qt)
Код
C++ (Qt)
void qSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)

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

Спасибо большое, GreatSnake!


Название: Re: Сортировка коллекции объектов
Отправлено: GreatSnake от Октябрь 18, 2016, 12:52
То есть можно сделать функцию для сравнения (LessThan lessThan), и подставить ее в функцию qSort в качестве третьего аргумента.
Да, а ещё лучше лямбду, если используешь C++11.