使用 Qt/C++ 的排序算法 - 对结构的 QList 进行排序

Sorting algorithm with Qt/C++ - sort a QList of struct

本文关键字:排序 结构 QList 算法 Qt C++ 使用      更新时间:2023-10-16

我想知道 stl 或 Qt 中是否有某种算法可以对双精度数组进行排序并返回原始列表中排序项目的索引。例如。L = 1,2,5,3L_sort = 1,2,3,5指数 = 1, 2 , 4, 3

这样我就可以在之后计算 OtherList[Index](相对于原始列表 L,两个列表的顺序相同)。

最后,我想创建一个QList,每个MyStruct包含两个成员,一个与L中的元素具有相同类型的LType,另一个与OtherList中的元素具有相同类型的OtherType。然后对LType类型的成员进行排序。但是我有这个想法,我不知道如何在Qt中进行正确的操作。

感谢和问候

您可以将带有索引的数据成对存储...首先按值排序,第二次按索引排序...

QList<QPair<LType,int> > array;
for (int i = 0; i < 100; i++)
{
    LType x = ...
    array.append(qMakePair(x,i));
}
// Ordering ascending
qSort(array.begin(), array.end(), QPairFirstComparer());
.....
// Restoring start order
qSort(array.begin(), array.end(), QPairSecondComparer());

您只需要这些类:

struct QPairFirstComparer
{
    template<typename T1, typename T2>
    bool operator()(const QPair<T1,T2> & a, const QPair<T1,T2> & b) const
    {
        return a.first < b.first;
    }
};
struct QPairSecondComparer
{
    template<typename T1, typename T2>
    bool operator()(const QPair<T1,T2> & a, const QPair<T1,T2> & b) const
    {
        return a.second < b.second;
    }
};