Russian Qt Forum

Qt => Общие вопросы => Тема начата: Zusykss от Апрель 22, 2017, 21:55



Название: Подскажите верно я использую лямбду в сортировке
Отправлено: Zusykss от Апрель 22, 2017, 21:55
Код:
std::sort(m_allStruct.begin(), m_allStruct.end(), [](ResultParsing& a, ResultParsing& b) { return ((a.m_producer == b.m_producer) && (a.m_category == b.m_category)); } );

В excel файле не заметно, что оно отсортировано

использовал .qSort();

но так же сортировки такой как мне нужно не добился, я хочу отсортировать список по двум полям, подскажите что не так


Название: Re: Подскажите верно я использую лямбду в сортировке
Отправлено: Johnik от Апрель 22, 2017, 22:59
Zusykss, попробуйте так:
Код
C++ (Qt)
return (a.m_producer == b.m_producer) ? (a.m_category < b.m_category) : (a.m_producer < b.m_producer);
 


Название: Re: Подскажите верно я использую лямбду в сортировке
Отправлено: Igors от Апрель 23, 2017, 09:29
Zusykss, попробуйте так:
Код
C++ (Qt)
return (a.m_producer == b.m_producer) ? (a.m_category < b.m_category) : (a.m_producer < b.m_producer);
 
Все верно, но сопля уже длинновата, а для 3 ключей станет нестерпимой. Мне больше нравится "тише едешь - дальше будешь"
Код
C++ (Qt)
bool Less( const data & a, const data & b )
{
// первый ключ
 if (a.key1 < b.key1) return true;
 if (a.key1 > b.key1) return false;
 
// второй ключ
 if (a.key2 < b.key2) return true;
 if (a.key2 > b.key2) return false;
...
// последний просто так
return a.keyLast < b.keyLast;
}
Впрочем это дело вкуса