QList是一种容器,可以用来存储多个元素,并且可以按照指定的顺序来排序。QList排序的实现方式主要有两种,一种是基于比较函数的排序,另一种是基于自定义类型的排序。
基于比较函数的排序
基于比较函数的排序使用QList::sort()函数,可以指定一个比较函数来实现排序,比较函数的原型如下:
bool compare(const T &a, const T &b);
其中T是QList中存储的元素类型,比较函数比较两个元素a和b,如果a小于b,则返回true,否则返回false。比较函数可以是用户自定义的,也可以使用Qt提供的比较函数,比如qLess(),qGreater()等。
使用QList::sort()函数实现排序,需要注意以下几点:
- 比较函数必须是一个全局函数,不能是成员函数;
- 比较函数必须是线程安全的;
- 比较函数中,不能修改QList中存储的元素;
- 比较函数中,不能抛出异常;
- 比较函数中,必须保证a和b的比较结果一致,即如果a小于b,则比较结果应该一直是true,否则一直是false。
基于自定义类型的排序
基于自定义类型的排序使用QList::operator<()函数,可以指定一个自定义类型来实现排序,自定义类型必须实现operator<()函数,operator<()函数的原型如下:
bool operator<(const T &other) const;
其中T是QList中存储的元素类型,operator<()函数比较两个元素a和b,如果a小于b,则返回true,否则返回false。
使用QList::operator<()函数实现排序,需要注意以下几点:
- operator<()函数必须是自定义类型的成员函数;
- operator<()函数必须是线程安全的;
- operator<()函数中,不能修改QList中存储的元素;
- operator<()函数中,不能抛出异常;
- operator<()函数中,必须保证a和b的比较结果一致,即如果a小于b,则比较结果应该一直是true,否则一直是false。