c++ - 为 x,y,z 坐标实现 operator<

标签 c++ stl

我有这种类型,基本上是

struct { int x,y,z; } 

我想用作 STL 映射的键。由于它是自定义类型,我需要为 map 实现 operator< 来实现它的比较魔法。

我很难实现允许这样做的功能。到目前为止,我已经尝试过:

return X < v.X && Y < v.Y && Z < v.Z;

根本不起作用,并且

return X*X+Y*Y+Z*Z < v.X*v.X+v.Y*v.Y+v.Z*v.Z;

给出这个形状而不是正方形:

enter image description here

请记住,x、y 或 z 值可能为负,这进一步使后面的解决方案无效。

有人知道如何实现这样的功能吗?

最佳答案

我假设您只需要任何稳定的订单,这样订购的容器就可以使用。

if ( X != v.X ) return X < v.X;
if ( Y != v.Y ) return Y < v.Y;
return Z < v.Z; 

这是做什么的:除非 X 相等,否则您根据 X 进行排序,如果相等,则根据 Y 进行排序,等等。

关于c++ - 为 x,y,z 坐标实现 operator<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11181760/

相关文章:

c++ - C++ 中的引用和指针类型转换

c++ - 使 std::fill 调用非 const 限定运算符重载

c++ - 关于C++迭代器 `map`的问题

c++ - mipsel-linux-objdump 无法识别 mipsel-linux-g++ 对象

c++ - 重载下标运算符 []

c++ - 当左值传递给 T&& 时,会发生什么?

C++ 编译时宏来检测 Windows 操作系统

c++ - Upper_bound 和 lower_bound 不编译

c# - 在 Visual Studio 解决方案中结合 C# 和 C++

c++ - 带分页的红黑树