找回密码
 立即注册
收起左侧

如何对QList<QSting>进行排序

9
回复
17472
查看
[复制链接]
累计签到:5 天
连续签到:1 天
来源: 2017-9-21 16:02:29 显示全部楼层 |阅读模式
5Qter豆
如题

最佳答案

查看完整内容

sortFileName是类的非静态成员函数,调用时一定要通过一个对象的。所以不能这样调用。 解决方法: 1,将sortFileName成员声明为静态成员函数: static bool sortFileName(const QString &str1, const QString &str2); 2. qSort(sortList->begin(), sortList->end(), &MainWindow::sortFileName); 3.函数写得也不对,应该是 bool MainWindow::sortFileName(const QString & str1, const QString & str2) { return str1.compare ...
回复

使用道具 举报

累计签到:77 天
连续签到:1 天
2017-9-21 16:02:30 显示全部楼层
本帖最后由 realfan 于 2017-9-22 15:57 编辑
walk 发表于 2017-9-22 10:15
QList  *sortList;      qSort(sortList->begin(),sortList->end(),sortFileName);

sortFileName是类的非静态成员函数,调用时一定要通过一个对象的。所以不能这样调用。
解决方法:
1,将sortFileName成员声明为静态成员函数:
static bool sortFileName(const QString &str1, const QString &str2);
2. qSort(sortList->begin(), sortList->end(), &MainWindow::sortFileName);
3.函数写得也不对,应该是
bool MainWindow::sortFileName(const QString & str1, const QString & str2)
{
    return str1.compare(str2, Qt::CaseInsensitive) < 0;
}
还有种方法,就是把sortFileName写成普通函数
bool sortFileName(const QString & str1, const QString & str2)
{
    return str1.compare(str2, Qt::CaseInsensitive) < 0;
}
qSort(sortList->begin(), sortList->end(), sortFileName);
这样与可以。
最后提醒一下,建议使用std::sort, qSort将来可能会从Qt中拿掉。
std::sort(sortList->begin(), sortList->end(),
              [](const QString & str1, const QString & str2){return str1.compare(str2, Qt::CaseInsensitive) < 0;});



回复

使用道具 举报

累计签到:2100 天
连续签到:3 天
2017-9-21 17:17:37 显示全部楼层
有个函数叫qSort,你搜一下
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-9-21 17:36:04 显示全部楼层
qSort用了报各种错,很纠结
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-9-21 17:39:56 显示全部楼层
网上qSort有的用三个参数,有的用四个参数,我用不明白
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2017-9-22 09:19:25 显示全部楼层
qSort可以默认排序,两个参数你需要输入的是迭代器,多个参数的是基于qSort的重载,后边参数就是需要你自己提供排序方法。文档上写的很清楚。
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-9-22 10:15:36 显示全部楼层
wdmxtk002 发表于 2017-9-22 09:19
qSort可以默认排序,两个参数你需要输入的是迭代器,多个参数的是基于qSort的重载,后边参数就是需要你自己 ...

QList<QString>  *sortList;      qSort(sortList->begin(),sortList->end(),sortFileName);



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-9-22 10:17:46 显示全部楼层
bool MainWindow::sortFileName(const QString &str1, const QString &str2)
{
   return QString::compare(str1, str2, Qt::CaseInsensitive);
}
回复

使用道具 举报

累计签到:70 天
连续签到:1 天
2017-9-22 11:50:50 显示全部楼层
知道冒泡排序不,遍历那个链表,把小的放到前面。
回复

使用道具 举报

累计签到:77 天
连续签到:1 天
2017-9-22 14:08:54 显示全部楼层
walk 发表于 2017-9-22 10:15
QList  *sortList;      qSort(sortList->begin(),sortList->end(),sortFileName);

这样写吧
std::sort(sortList->begin(), sortList->end(),
              [](const QString & str1, const QString & str2){return str1.compare(str2, Qt::CaseInsensitive) < 0;});
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了