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