Связано: что я могу использовать как std::map
ключи?
Мне нужно было создать отображение, где конкретные ключевые места на космической карте со списками объектов. std::map
казалось способ сделать это.
Так что я набираю std::map
на xyz Vector
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 кажется способом сделать это.
Предложения? Приветствуются готовые решения !!