如何使 QList<QVector3D> 独一无二

Sch*_*lle 5 qt unique qlist

我有一个QList组成QVector3D。AQVector3D代表一个顶点或一个点。此 List 还包含 a 的所有顶点STL-File。问题是一个顶点在列表中多次存在。需要一个 STL 文件的唯一顶点列表。我该如何实现它Qt 5.0.2

Val*_*itz 5

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();
Run Code Online (Sandbox Code Playgroud)

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