如何在QList中对自定义类型使用qSort
How to use qSort with custom types in QList?
我对包含struct
:实例的QList
进行排序时遇到问题
class modelHeuristic
{
typedef struct {
QString c;
QString t;
double value;
}Saving;
public:
QList<Saving> list_saving;
#include "klarkeright.h"
klarkeRight::klarkeRight()
{
}
void klarkeRight::Algoritmo_Asimetrico(modelHeuristic *model)
{
qSort(model->list_saving.begin(), model->list_saving.end());
}
错误:二进制表达式的操作数无效("const modelHeuristic::Saving"answers"const model Heuristic::Saving")return(t1<t2);>
首先,QtAlgorithms大多被弃用,您不应该使用它。请按照Qt文档的建议使用std::sort。
否则,您将需要实现实际的比较功能,因为您似乎在使用自定义类型。自然,通用算法不知道如何与这样的自定义项进行比较。这就是错误试图表明的。
然后,您需要将该函数作为第三个参数传递给排序算法,或者将其命名为operator<
。我更喜欢明确,尤其是从那时起,你可以将你的比较限制在它所绑定的类上。
因此,我会写这样的东西:
main.cpp
#include <QtAlgorithms>
#include <QString>
#include <QList>
class modelHeuristic
{
typedef struct {
QString c;
QString t;
double value;
} Saving;
public:
static bool savingComparison(const Saving &s1, const Saving &s2)
{
return s1.value < s2.value; // This is just an example
}
QList<Saving> list_saving;
};
int main()
{
modelHeuristic *model = new modelHeuristic();
// This is not doing anything useful with an empty list
// that is constructed, but it shows how to get the theory right!
// Also, you really wish to use std::sort here instead.
qSort(model->list_saving.begin(), model->list_saving.end(), modelHeuristic::savingComparison);
return 0;
}
main.pro
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
构建并运行
qmake && make && ./main
有关详细信息,请参阅文档。
要执行排序,通常需要对要排序的元素进行一些排序。如果您没有一个机制来告诉哪个元素在另一个元素之前,则无法对列表进行排序。
qSort(和大多数其他排序算法)使用operator <
来比较元素。您没有指定这样的运算符。
编译器(或任何人)应该如何知道一个Saving
是否应该放在另一个Saving
对象之前?
Saving {"Test", "foo", 1.2}
在Saving {"bar", "baz", 1000000}
之前吗?
根据您的分拣规则实施operator <
:
typedef struct {
QString c;
QString t;
double value;
} Saving;
bool operator < (const Saving &s1, const Saving &s2) {
/*Your comparsion code */
}
这就是你的编译器告诉你的:
错误:二进制表达式的无效操作数("const modelHeuristic::Saving"answers"const model Heuristic::Saving")返回(t1<t2);
它无法使用<
比较两个Saving
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- qsort 不适用于我的 impl 中的浮点类型。怎么了?
- 如何在QList中对自定义类型使用qSort
- 用qsort -正确的类型转换排序2D数组
- qsort 在C++中不适用于哪些类型