您可以成对存储带有索引的数据...首先按值排序,然后按索引排序...
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;
}
};