簡體   English   中英

比較兩個3D向量

[英]Compare two 3D vectors

我將3D向量用作C ++地圖容器中的鍵,為此我必須實現兩個向量的比較。 我用幅度來比較向量。 但是,當兩個向量不同但其大小相同時,就會出現問題,從而導致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();
    }
};

有什么方法可以比較兩個向量嗎?

除了簡單地比較它們的magnitude您還可以使用std::tuple 進行比較 ,該比較具有按字典順序定義的比較運算符

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;

因此,由於您定義了operator<因此將定義std::less

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM