我将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)