1

当我尝试将 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*,它工作正常。但是双倍也应该起作用。

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

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

谢谢,

匆忙

4

1 回答 1

5

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

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

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

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

a) 不要使用浮点数

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

于 2011-10-07T01:12:36.687 回答