我正在尝试创建一个 std::set 的 GLM vector (特别是 glm::vec3 )。由于 C++ 不知道如何对 vector 执行 我可以通过创建这样的结构来编写自己的结构:struct compareVec{ bool operator() (const glm::vec3& lhs, const glm::vec3& rhs) const { return lhs.x < rhs.x && lhs.y < rhs.y && lhs.z < rhs.z; }};std::set< glm::vec3, compareVec > myset;但是,我确信 GLM 包含它们自己的 vector 比较函数。我找到了以下资源,但我不确定如何使用它: https://glm.g-truc.net/0.9.4/api/a00137.html如何将这些比较函数之一传递给我的集合? 最佳答案 好了,快到了! glm::lessThan 返回一个 vector 类型,而不是一个 bool 值。这就是您的比较器不起作用的原因。您可以在其上使用 glm::all 来获取 bool 值。来自 glm::all 的文档 bool glm::all ( vecType< bool > const & v ) Returns true if all components of x are true. Template Parameters vecType Boolean vector types.如果这对您有意义,您必须自己决定,即使我不建议这样做,据我所知,这将导致以下问题:Consider:lhs = (1,2,3)rhs = (0,1,4)Than:lhs < rhs ==> false, since lhs.x and lhs.y are larger than the corresponding components of rhsrhs < lhs ==> false, since rhs.z component is larger than lhs.z由于两个 vector 都不能被排序为更小,这意味着它们是相等的。我怀疑这是您想到的行为(我已经警告过您这一点)。如果您仍然决定使用它,以下是在 MSVC2010 上测试的最小工作示例:#include <set>#include <glm/vec3.hpp>#include <glm/detail/func_vector_relational.hpp>struct compareVec{ bool operator() (const glm::vec3& lhs, const glm::vec3& rhs) const { return glm::all(glm::lessThan(lhs, rhs)); }};int main(){ std::set<glm::vec3, compareVec> myset; return 0;}也许这有帮助。关于c++ - 如何使用 GLM vector 关系函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46636721/
10-13 03:58