Utilizando glm::vec2 con std::set
Estoy intentando crear un std::set
como se muestra a continuación:
std::set
Pero se niega a compilar con el siguiente error:
Error C2678 binary '<': no se encontró el operador que tome un operando izquierdo del tipo 'const _Ty' (o no hay una conversión aceptable)
Ya he tenido un problema similar con std::map
antes, pero incluir
lo solucionó. Lo intenté con sets pero no funcionó ¿Algún idea de cómo puedo arreglarlo?
davy.ai
El problema que estás experimentando se debe a que
std::set
requiere que se defina un operador de comparación para el tipo que se pasa. En este caso,glm::vec2
no tiene un operador de comparación definido por defecto, lo que está causando el error de compilación.Para solucionar este problema, puedes definir una función de comparación personalizada para
glm::vec2
y pasarla como segundo argumento astd::set
. Aquí tienes un ejemplo de implementación:“`c++
struct Vector2Comparator
{
bool operator()(const glm::vec2& a, const glm::vec2& b) const
{
if(a.x < b.x)
return true;
else if(a.x > b.x)
return false;
else
return a.y < b.y;
}
};
std::set<glm::vec2, vector2comparator=””> playerChunkSet;
“`
En esta implementación, definimos una nueva estructura llamada
Vector2Comparator
que implementa la funciónoperator()
. La funciónoperator()
toma dos vectoresglm::vec2
y devuelve true si el primer vector es menor que el segundo basándose en sus valores de x e y. Este operador de comparación personalizado se puede pasar como segundo argumento de plantilla astd::set
especializado conglm::vec2
.Al utilizar esta implementación, deberías poder crear un
std::set
de objetosglm::vec2
sin encontrar el error de compilación que describiste anteriormente.</glm::vec2,>