我需要创建一个映射,其中空间中的特定关键位置映射到对象列表。 std::map
似乎是这样做的方法。
所以我在std::map
xyz 上键入 aVector
class Vector
{
float x,y,z
} ;
,我正在制作一个std::map<Vector, std::vector<Object*> >
. 所以请注意这里的关键不是a 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) 和 (-1, - 1, 1) > (-1,-1,-1) 例如)。
我的问题是这真的是人为的,虽然我已经对其进行了编码并且它可以工作,但我发现它用这个非常奇怪的、人为的、非基于数学的“小于”概念“污染”了我的 Vector 类(在数学上)为向量。
但是我需要创建一个映射,其中空间中的特定关键位置映射到某些对象,而 std::map 似乎是这样做的方法。
建议?欢迎开箱即用的解决方案!!