3

我有一个自定义类型 Class1 在其中bool operator < (Class1& other);定义。
我也有一些容器,例如QVector<Class1*> container;
当我使用qSort(container.begin(),container.end());项目时,它们是按它们的内存地址排序的。然后我决定实施bool operator < (Class1* other);,但排序是以相同的方式进行的。

4

2 回答 2

8

您需要LessThan为该函数提供一个qSort函数。这是文档中的一个示例:

void qSort(RandomAccessIterator 开始,RandomAccessIterator 结束,LessThan lessThan)

这是一个过载功能。

使用 lessThan 函数而不是 operator<() 来比较项目。

例如,下面是如何以不区分大小写的字母顺序对 QStringList 中的字符串进行排序:

 bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
 {
     return s1.toLower() < s2.toLower();
 }

 int doSomething()
 {
     QStringList list;
     list << "AlPha" << "beTA" << "gamma" << "DELTA";
     qSort(list.begin(), list.end(), caseInsensitiveLessThan);
     // list: [ "AlPha", "beTA", "DELTA", "gamma" ]
 }
于 2013-05-24T14:23:38.850 回答
0

使用可以在调用中提供自己的比较器的变体:

qSort(container.begin(),container.end(),
    [](const Class1* first, const Class1* second)
    { return first->operator<(*second); });
于 2013-05-24T14:23:59.420 回答