调用重载 'qHash(const double&)' 不明确

Rus*_*shK 1 c++ qt qlist

当我尝试将 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 也应该工作。

我想要做的就是从我的列表中删除重复项。我想找到一种方法来做到这一点,而无需自己迭代列表。

任何帮助消除此错误或删除重复项的其他功能将不胜感激。

谢谢,

匆忙

Chr*_*ris 5

编译器错误是由于 Qt 根本没有定义接受双精度值的 qHash() 函数。这样做的原因是在散列中使用浮点数作为键通常是一个坏主意(在这种情况下,您的 QSet 在内部使用散列)。

您说您正在尝试删除重复项,但是 C++ 中浮点数之间相等的概念是模糊的,因为事实证明很难说任何两个浮点数真的相等。

(请参阅有关此主题的 C++ 常见问题解答

您的问题的解决方案将是:

a) 不要使用浮点数

b) 定义自己的 qHash 函数,以令人满意的方式满足您的程序要求。qHash( double )在您的实现文件中定义 a就足够了。