agregar varios datos en un MAP

Iniciado por elcout, 7 Diciembre 2020, 01:01 AM

0 Miembros y 1 Visitante están viendo este tema.

elcout

hola les comento que estoy realizando un programa en donde en una clase tengo que usar 2 maps para guardar información... el detallito es que debo guardar en una misma llave o map  3 valores estos serian 2 string y un int pero no se me ocurre como hacer que el programa me deje hacerlo... lo haria con multimap pero el profesor  especifico que debe ser usando maps y ya se me acabaron las ideas:(

Les dejo como me plantearon que debia ser el desarrollo de los map:

Toda la información se guarda en una clase llamada Producción que tiene como atributos dos map. El primer map tiene como llave el nombre de la planta y como contenido un vector de objetos de tipo Insumo. Un objeto de tipo Insumo tiene tres atributos: nombreIQ, unidad de medida y stock. El segundo map, registra el consumo de cada insumo en cada planta, su llave es el nombre de la planta y el contenido es un objeto de tipo Consumo que tiene tres atributos: nombreIQ, cantidad consumida y fecha (yyyymmdd).

no les pido que me lo hagan solo que me orienten cualquier pdf o ayuda se las agradecería un monton:(

K-YreX

No veo cuál es el problema que comentas. No tienes que guardar 3 valores (2 strings y 1 int) pues estos están encapsulados dentro de una clase. Lo que tú vas a guardar es el objeto de esa clase únicamente. Sería algo así el esquema general:
Código (cpp) [Seleccionar]

class Insumo {
  private:
    std::string nombreIQ;
    std::string unidadMedida;
    int stock;
  //...
};

class Consumo {
  private:
    std::string nombreIQ;
    int cantidadConsumida;
    int fecha; // o el tipo de dato que sea
  //...
};

class Produccion {
  private:
    std::map<std::string, std::vector<Insumo>> insumos;
    std::map<std::string, Consumo> consumos;
  //...
};


No sé si esto te sirve pero por lo que veo estabas intentando meter los atributos por separado en el map en vez de crear una clase como te dice en el enunciado. Al final esto es lo que viene siendo el paradigma de programación orientada a objetos (POO): utilizar clases para encapsular información de una entidad y poder utilizar esa clase para instanciar objetos de ese tipo.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

elcout

#2
ohhh verdad no lo habia tenido en cuenta me habia cerrado a una sola posibilidad te agradezco el consejo!




EI: juntando mensajes consecutivos.




una ultima duda al momento de  ingresarle valores al map insumos como deberia hacerlo?
se que para la llave  que es el nombre de la planta va insumos[nombre] pero no recuerdo como pasar los datos k debe almacenar en formato vector... no se si se me entiende

K-YreX

Tienes que asignarle con el = el dato que tiene que guardar.
Según las declaraciones de clases que he hecho antes, el segundo campo es un std::vector<Insumo> por lo que es ese objeto el que le tienes que asignar.
Código (cpp) [Seleccionar]

Insumo insumo1("Nombre insumo 1", "Unidad de medida 1", 1);
std::vector<Insumo> insumos; // creas el vector
// introduces los objetos que quieras
insumos.push_back(insumo1);
//...
std::map<string, std::vector<Insumo>> myMap;
myMap["tu cadena"] = insumos;
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;