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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Сортировка QLinkedList  (Прочитано 3511 раз)
Yegor
Гость
« : Октябрь 21, 2016, 19:26 »

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

У меня есть QLinkedList, который я хочу отсортировать. Пробую с помощью qSort.
Пишу, например:
Код
C++ (Qt)
QLinkedList<int> list;
list << 1 << 2 << 3;
qSort( list.begin(), list.end() );

При компиляции такого выдается много ошибок.
Если класс QLinkedList заменить на QList, то компиляция успешная.

Каким же образом сортировать QLinkedList? Подскажите, пожалуйста.
Спасибо!
« Последнее редактирование: Октябрь 22, 2016, 10:03 от Yegor » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


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

QList - это на самом деле массив. Сортировать можно только контейнеры прямого доступа (QList, QVector).
Ответ - скопировать QLinkedList в масссив (напр, QVector), отсортировать его, скопировать обратно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Каким же образом сортировать QLinkedList?
Может стоит использовать std::list который имеет метод sort, причем хитрый - адрес элемента не меняется, т.е. такая сортировка намного эффективнее. К сожалению, для QLinkedList такого же метода не видно. Ну зато есть удобный соскок в std и обратно (from/toStdList)
Записан
Yegor
Гость
« Ответ #3 : Октябрь 22, 2016, 10:03 »

Как по мне, удобное решение сделать временный QList и отсортировать его. А потом перезаполнить QLinkedList из этого QList. Хотя и решение с std::list более целесообразное.

Спасибо большое всем за помощь!
« Последнее редактирование: Октябрь 22, 2016, 10:04 от Yegor » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Как по мне, удобное решение сделать временный QList и отсортировать его. А потом перезаполнить QLinkedList из этого QList.
Возможно еще решение - не трогать QLinkedList, пусть адреса эл-тов там не меняются. А нужна сортировка - сделать контейнер указателей и его сортировать. Это заметно быстрее для приличных эл-тов и в духе "списка", обычно его и заводят чтобы эл-ты не дергать. Правда за это придется заплатить еще контейнером. 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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