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

kir*_*off 6 c++ sorting algorithm qt

我想知道它们是在stl中还是在Qt中的一些算法,它对double数组进行排序并返回原始列表中已排序项的索引.例如.L = 1,2,5,3 L_sort = 1,2,3,5指数= 1,2,4,3

这样我就可以在之后计算AnotherList [指数](相对于原始列表L,两个列表中的相同顺序占优势).

最后,我考虑创建一个QList,每个MyStruct包含两个成员,一个与Ltype中的元素类型相同的LType,另一个类型为AnotherType,作为AnotherList中的元素.然后针对LType类型的成员进行排序.但是我有这个想法,我不知道如何在Qt中继续进行.

感谢致敬

k06*_*06a 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());
Run Code Online (Sandbox Code Playgroud)

你只需要这些类:

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;
    }
};
Run Code Online (Sandbox Code Playgroud)