是否可以在stl算法中使用glm :: gtx :: comparison中定义的运算符?
具体来说,我有这段代码:
std::vector<glm::ivec3> vecA, vecB; // vectors with content
bool result = std::equal(vecA.begin(), vecA.end(), vecB.begin());
默认情况下失败导致无法找到operator ==。
答案 0 :(得分:2)
迟到了几年,但我想分享我的修复。 我需要一个比较器函数用于std :: map和std :: set。
经过一些修补,我发现解决方案有以下代码
#ifndef __UTIL_GLM__
#define __UTIL_GLM__
#include "glm/vec2.hpp"
namespace glm{
template <typename T, precision P>
bool operator<(const tvec2<T, P>& a,const tvec2<T, P>& b)
{
return (a.x < b.x || (a.x == b.x && a.y < b.y));
}
};
#endif
在头文件util_glm.hpp中,并将其包含在
所需的比较器中#include "util_glm.hpp"
我相信可以为glm :: ivec3
做一个类似的解决方案答案 1 :(得分:1)
显然是open bug。
答案 2 :(得分:0)
你可以在virtrev /目录中#include equal_operator.hpp。
答案 3 :(得分:0)
为了能够在glm::vec3
中使用std::set<>
,我在 type_vec3.inl 中实现了以下重载:
template <typename T>
GLM_FUNC_QUALIFIER bool operator<
(
tvec3<T> const & v1,
tvec3<T> const & v2
)
{
if(v1.x == v2.x && v1.y == v2.y && v1.z < v2.z) return true;
if(v1.x == v2.x && v1.y < v2.y) return true;
if(v1.x < v2.x) return true;
return false;
}
不幸的是,我不知道如何在不更改glm代码的情况下实现它。
这种实现方式认为x轴比y轴更相关,而y轴与z相关性更小。更改代码以使任何其他轴更相关是非常简单的。
==
运算符已经实现。