es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando glm::vec2 con std::set

Estoy intentando crear un std::set como se muestra a continuación:


std::set playerChunkSet;

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?

Tags:  , ,

Answer

  1. Avatar for 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 a std::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ón operator(). La función operator() toma dos vectores glm::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 a std::set especializado con glm::vec2.

    Al utilizar esta implementación, deberías poder crear un std::set de objetos glm::vec2 sin encontrar el error de compilación que describiste anteriormente.</glm::vec2,>

Comments are closed.