我将glm :: ivec3键存储在一个集中。由于此类型缺少keyCompare函数,因此我已在结构中定义了它。如果我只有两个数字a,b,我可以简单地写一个
我尝试了以下方法:

struct KeyCompare
{
    bool operator()(const glm::ivec3& a, const glm::ivec3& b)const
    {
        return a.x < b.x && a.y < b.y && a.z < b.z;
    }
};

typedef set<glm::ivec3, KeyCompare> ChunkSet;


现在我可以插入值,但是在检查值是否存在时,无需插入此键就返回true。

您知道向量的比较方式吗?

提前致谢!

最佳答案

你可以试试

return a.x < b.x || (a.x == b.x && a.y < b.y) || (a.x == b.x && a.y == b.y && a.z < b.z);


初始实现的问题在于,以下向量似乎相等,因为!(a < b) && !(b < a)对该实现成立:

(3, 7, 12), (4, 6, 12)

10-06 13:51