从QList调用Qsort似乎不适用于对2列进行排序。如果是这种情况,我想继承QList并添加一个调用“比较”函数的Quicksort方法来确定排序顺序。
刚接触Qt(主要是Delphi)我在实现代码时遇到了麻烦。 我希望以下内容表达所需代码的“概念”:
//prototype
#define TComp = int compare(pointer1, pointer2);
int MyComp(p1, p2)
{
if (p1.x < p2.x) return –1
else if (p1.x > p2.x) return 1
else if (p1.y < p2.y) return –1
else if (p1.y > p2.y) return 1
else return 0
}
class TObjList : public QList
{
public:
void mySort(MyComp);
private:
void QuickSort(TComp MyComp);
};
这是一个很大的问题,但我现阶段需要帮助。
答案 0 :(得分:1)
我有几件事我不会这样做:
我建议使用std :: sort和自定义比较函数(在C ++ 11中,这可以使用lambda或std :: tuple来实现像这里完成的字典比较):
template <typename T>
bool xyLessThan(const T &lhs, const T &rhs)
{
if (lhs.x == rhs.x)
return lhs.y < rhs.y;
return lhs.x < rhs.x;
}
然后例如。
QList<Point> points;
...
std::sort(points.begin(), points.end(), &xyLessThan);
使用通用排序算法,您可以指定要用于比较的函数,此处为xyLessThan
。
如果您控制元素的类(QList中的T)并且是否有“自然”排序,您可以像这样添加operator<
:
bool Point::operator<(const Point &other) const
{
if (x == other.x)
return y < other.y;
return x < other.x;
}
然后你可以做
std::sort(points.begin(), points.end());