我正在使用 std::set 来实现特定的算法。该集合中有重复项,所以我认为我必须重载运算符。重载看起来像这样。
class Vec3f {
...
bool operator () ( const Vector3f& v0, const Vector3f& v1 ) const {
float epsilon = 1e-7;
return ((v1[0] - v0[0]) > epsilon) && ((v1[1] - v0[1]) > epsilon) && ((v1[2] - v0[2]) > epsilon);
} ...
"Vec3f.h"
int main(){
...
std::set<Vec3f,Vec3f> visited;
...
}
我重载了它,所以我可以使用 std::set 中所需的 < 运算符。如果 v0 < v1 到某个边距,此函数返回 true。它会删除重复项,但也会删除集合中的有效值。我知道我的设备应该有 12 个 Vec3fs。有了重复项,它有 24 个 Vec3fs。使用我的比较功能,它只有 3 个 Vec3f。我考虑使用绝对差异,但这违反了严格的弱排序标准。我的问题是:如何编写比较函数来删除重复项并仅保留唯一项?