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

时间:2011-10-06 23:55:05

标签: 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();

我知道为什么会收到此错误?如果我将类型更改为int或double *,它工作正常。但双重也应该有效。

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

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

谢谢,

拉​​什

1 个答案:

答案 0 :(得分:4)

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

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

(见the C++ faq regarding this subject

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

a)不要使用浮点数

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