当我尝试将 QList 转换为 QSet 时出现此错误。
QList<double> x_pts;
x_pts << 4.1;
x_pts << 2.2;
x_pts << 2.2;
x_pts << 1.3;
qSort(x_pts);
QSet<double> list = x_pts.toSet();
Run Code Online (Sandbox Code Playgroud)
知道为什么我会收到此错误吗?如果我将类型更改为 int 或 double*,它可以正常工作。但 double 也应该工作。
我想要做的就是从我的列表中删除重复项。我想找到一种方法来做到这一点,而无需自己迭代列表。
任何帮助消除此错误或删除重复项的其他功能将不胜感激。
谢谢,
匆忙
编译器错误是由于 Qt 根本没有定义接受双精度值的 qHash() 函数。这样做的原因是在散列中使用浮点数作为键通常是一个坏主意(在这种情况下,您的 QSet 在内部使用散列)。
您说您正在尝试删除重复项,但是 C++ 中浮点数之间相等的概念是模糊的,因为事实证明很难说任何两个浮点数真的相等。
(请参阅有关此主题的 C++ 常见问题解答)
您的问题的解决方案将是:
a) 不要使用浮点数
b) 定义自己的 qHash 函数,以令人满意的方式满足您的程序要求。qHash( double )在您的实现文件中定义 a就足够了。