空間内の特定の主要な位置がオブジェクトのリストにマッピングされるマッピングを作成する必要がありました。 std::map
やり方だったようです。
だから私はstd::map
xyzにキーを打っていますVector
class Vector
{
float x,y,z
} ;
、そして私は を作っていstd::map<Vector, std::vector<Object*> >
ます。したがって、ここでのキーは ではなく、std::vector
そのオブジェクトはclass Vector
、私自身が作成した数学 xyz ベクトルであることに注意してください。
「厳密に弱い順序付け」を生成するために、次のオーバーロードを に記述しましたoperator<
。
bool Vector::operator<( const Vector & b ) const {
// z trumps, then y, then x
if( z < b.z )
{
return true ;
}
else if( z == b.z )
{
if( y < b.y )
{
// z == b.z and y < b.y
return true ;
}
else if( y == b.y )
{
if( x < b.x )
{
return true ;
}
else if( x == b.x )
{
// completely equal
return false ;
}
else
{
return false ;
}
}
else
{
// z==b.z and y >= b.y
return false ;
}
}
else
{
// z >= b.z
return false ;
}
}
少し長いですが、基本的には、どのベクトルも一貫して他のどのベクトルよりも小さいと言えるようになっています ((-1, -1, -1) < (-1,-1,1), and (-1, - 1, 1) > (-1,-1,-1) など)。
私の問題は、これは本当に人為的であり、コード化して機能しますが、この本当に奇妙で人為的な非数学ベースの「未満」の概念で、Vector クラスを (数学的に) 「汚染」していることに気付きました。ベクトルの場合。
しかし、空間内の特定のキー位置が特定のオブジェクトにマップされるマッピングを作成する必要があり、std::map がそれを行う方法のようです。
提案?すぐに使えるソリューションを歓迎します!!