gpt4 book ai didi

c++ - 比较两个 3D vector

转载 作者:行者123 更新时间:2023-11-28 02:01:10 25 4
gpt4 key购买 nike

我在 C++ map 容器中使用 3D vector 作为键。为此我必须实现两个 vector 的比较。我使用幅度来比较 vector 。但是当两个 vector 不同但它们的大小相同时,就会出现问题,这会导致覆盖 C++ 映射容器中的键。

您可以找到实现的小片段。

class Vector3f
{
public:
float x, y, z;
double magnitude() const { return sqrt(x*x + y*y + z*z); }
}
std::map<Vector3f, std::vector<int>, Vector3fCompare> vector_index;

struct Vector3fCompare
{
bool operator() (const Vector3f& lhs, const Vector3f& rhs) const
{
return lhs.magnitude() < rhs.magnitude();
}
};

有什么方法可以比较两个 vector 吗?

最佳答案

而不是简单地比较他们的 magnitude您可以使用 std::tuple 进行比较其中有 comparison operators按字典顺序定义。

struct Vector3fCompare
{
bool operator() (const Vector3f& lhs, const Vector3f& rhs) const
{
return std::make_tuple(lhs.x, lhs.y, lhs.z) < std::make_tuple(rhs.x, rhs.y, rhs.z);
}
};

另请注意,如果您定义 operator<在你的类中,那么你不需要创建这个结构,作为 map 的模板参数是

template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T> >
> class map;

所以 std::less将被定义,因为你定义了 operator<

关于c++ - 比较两个 3D vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39471007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com