qt - 如何使 QList<QVector3D> 独一无二

标签 qt unique qlist

我有一个 QListQVector3D 组成.一个 QVector3D表示一个顶点或一个点。此列表还包含 STL-File 的所有顶点.问题是一个顶点在列表中多次存在。需要一个 STL 文件的唯一顶点列表。我如何使用 Qt 5.0.2 来实现它?

最佳答案

QSet 使用哈希函数来确保值的唯一性(QMap 使用运算符 <)
Qt 中没有 QVector3D 的 qHash 实现。
您可以实现自己的一个,例如例如:

//place anywhere in Qt-code
#include <QSet>
#include <QVector3D>
#include <QList>

uint qHash(const QVector3D &v)
{
    return qHash( QString( "%1x%2x%3" ).arg(v.x()).arg(v.y()).arg(v.z()) ) ;
}

int foo()
{
    QList<QVector3D> uvector3D_1;
    QSet<QVector3D> uvector3D_2;

    uvector3D_2 = QSet<QVector3D>::fromList(uvector3D_1);
return 0;
}

static int testFoo = foo();

因为它不是最快的,它依赖于 Qt 的 QString 函数 qHash。但我认为它有利于演示。

关于qt - 如何使 QList<QVector3D> 独一无二,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18204019/

相关文章:

c++ - 如何在 QGraphicsView/Scene 上绘制 QPoint

c++ - 更改 QCheckBox 文本颜色

r - 将唯一行添加到数据框(与相交相反)

hibernate - 如何在 Hibernate 中使用唯一键而不是主键检索记录

c++ - QList<T>::operator[] 中的 ASSERT 失败: "index out of range"文件/usr/include/arm-linux-gnueabihf/qt5/QtCore/qlist.h

qt - 什么是 Qt 裸机?

c++ - 如何在后台运行 QProcess?

sql - 表中非连续行之间的 Datediff

c++ - 如何使 QList<Type*> 与 indexOf() 和自定义运算符 ==() 一起使用?

qt - 从QList填充QVector