#c #qt #qlist
#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 * . Но double также должен работать.
Все, что я хочу сделать, это удалить дубликаты из моего списка. Я хочу найти способ сделать это без повторения списка самостоятельно.
Любая помощь в устранении этой ошибки или другой функции для удаления дубликатов будет оценена по достоинству.
Спасибо,
Спешка
Комментарии:
1. Можете ли вы предоставить точное сообщение компилятора?
2. Не могли бы вы также предоставить свою платформу и версию Qt? Это похоже на ошибку Qt.
Ответ №1:
Ошибка компилятора связана с тем, что Qt просто не определил функцию QHash (), которая принимает значение double. Причина этого в том, что, как правило, плохая идея использовать числа с плавающей запятой в качестве ключей в хэше (в этом случае ваш QSet использует хэш внутри).
Вы говорите, что пытаетесь удалить дубликаты, но концепция равенства между числами с плавающей запятой в C нечеткая, поскольку оказывается довольно сложно сказать, что любые два числа с плавающей запятой действительно равны.
(См. Faq по C по этому вопросу)
Решение вашей проблемы будет либо:
а) Не используйте числа с плавающей запятой
б) Определите свою собственную функцию QHash, которая удовлетворяет требованиям вашей программы удовлетворительным образом. Определения a qHash( double )
в вашем файле внедрения было бы достаточно.