当我尝试将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 *,它工作正常。但双重也应该有效。
我想要做的就是从列表中删除重复项。我希望找到一种方法来实现它,而无需自己迭代列表。
任何有关删除此错误或其他功能以删除重复项的帮助都将不胜感激。
谢谢,
拉什
答案 0 :(得分:4)
编译器错误是由于Qt没有定义一个接受double的qHash()函数。这样做的原因是,使用浮点数作为哈希中的键通常是个坏主意(在这种情况下,您的QSet在内部使用哈希)。
你说你试图删除重复项,但浮点数之间的相等概念在C ++中是模糊的,因为事实证明很难说任何两个浮点数真的相等。
(见the C++ faq regarding this subject)
您的问题的解决方案将是:
a)不要使用浮点数
b)定义自己的qHash函数,以令人满意的方式满足程序的要求。在您的实施文件中定义qHash( double )
就足够了。