特定のアルゴリズムを実装するために 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 があります。私の比較関数では、Vec3f は 3 つしかありません。絶対差を使用することを検討しましたが、それは厳密な弱い順序付け基準に違反しています。私の質問は次のとおりです。重複を削除して一意のアイテムのみを保持する比較関数を作成するにはどうすればよいですか?