6

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

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

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

谢谢并恭祝安康

4

1 回答 1

9

您可以成对存储带有索引的数据...首先按值排序,然后按索引排序...

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;
    }
};
于 2012-04-17T10:39:07.840 回答