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.

C++ es la forma de acceder a un elemento de std::vector por su nombre?

Estoy experimentando con una clase de vértice simple.

“`c++
class Vertex
{
public:
std::vector coords;
//otra funcionalidad aquí – en gran parte irrelevante
};


Y digamos que creamos un objeto `Vertex` de la siguiente manera: ```c++ Vertex v0(1.f, 5.f, 7.f);

Me pregunto si hay alguna forma de asignar un nombre a cada elemento de un vector.

Supongamos que cada std::vector siempre tendrá un tamaño de 3. Sé que puedo acceder a un elemento o índice del vector de la siguiente manera: v0.coords[0] hasta v0.coords[2].

Sin embargo, me pregunto si hay una forma en la que pueda asignar un nombre a cada elemento del vector, es decir:

c++
v0.coords.x == v0.coords[0];
v0.coords.y == v0.coords[1];
v0.coords.z == v0.coords[2];

Para que si quiero acceder al vector, pueda hacerlo a través de un nombre en lugar de un índice.

¿Es posible algo así? Si es así, ¿cómo puedo crear tales alias?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnologías de la información especializado en C++, C++17, std y std::vector, puedo sugerir usar una struct en lugar de una class para Vertex y definir explícitamente sus miembros. De esta manera, puedes asignar un nombre a cada elemento del vector, de la siguiente manera:

    “`c++
    struct Vertex {
    float x, y, z;
    // otras funcionalidades aquí – en gran parte irrelevantes
    Vertex(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
    };


    Ahora, puedes crear un objeto `Vertex` de la siguiente manera: ```c++ Vertex v0(1.f, 5.f, 7.f);

    Y acceder a sus elementos utilizando sus nombres:

    “`c++
    v0.x == 1.f;
    v0.y == 5.f;
    v0.z == 7.f;


    Alternativamente, si aún deseas usar un `std::vector` para `coords`, puedes definir constantes para sus índices para darles nombres, de la siguiente manera: ```c++ class Vertex { public: std::vector<float> coords; static constexpr size_t x_ = 0; static constexpr size_t y_ = 1; static constexpr size_t z_ = 2; // otras funcionalidades aquí - en gran parte irrelevantes Vertex(float x, float y, float z) : coords{x, y, z} {} };

    Ahora, puedes crear un objeto Vertex y acceder a sus elementos utilizando sus nombres:

    c++
    Vertex v0(1.f, 5.f, 7.f);
    v0.coords[Vertex::x_] == 1.f;
    v0.coords[Vertex::y_] == 5.f;
    v0.coords[Vertex::z_] == 7.f;

Comments are closed.