Russian Qt Forum

Qt => Общие вопросы => Тема начата: White Owl от Февраль 06, 2015, 02:14



Название: Сортировка QList< struct >
Отправлено: White Owl от Февраль 06, 2015, 02:14
Имеется QMap содержащий классы. Понадобилось просканировать этот словарь отсортированным по полю внутри класса.

Код:
class Record{
private:
   QString field;
   ....
public:
   static bool compareByField(const Record &s1, const Record &s2) {
        return s1.field.toLower() < s2.field.toLower();
   }
};
QMap<int, Record> mydictionary;

QList<Record> tmp = mydictionary.values();
qSort(tmp.begin(), tmp.end(), Record::compareByField);
foreach(Record r, tmp) {
   // actual work
}
Вроде все работает, но как-то уж очень это кучеряво.
Может можно обойтись без создания дополнительного списка tmp?


Название: Re: Сортировка QList< struct >
Отправлено: Igors от Февраль 06, 2015, 10:08
Может можно обойтись без создания дополнительного списка tmp?
Нет, но можно сделать это аккуратнее сортируя указатели, т.е. избегая копирования данных


Название: Re: Сортировка QList< struct >
Отправлено: GreatSnake от Февраль 06, 2015, 11:20
Или держать "параллельно"
Код
C++ (Qt)
QMap< QString, Record* > my_sorted_dictionary;


Название: Re: Сортировка QList< struct >
Отправлено: White Owl от Февраль 06, 2015, 20:40
Или держать "параллельно"
Код
C++ (Qt)
QMap< QString, Record* > my_sorted_dictionary;
Угу.... Сделал почти так. Только в качестве значений не ссылки на данные а int - ключи основного хранилища.