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.

¿Cuál es el tamaño de un nodo en std::map que contiene una pareja enum – puntero?

Estoy trabajando en reducir los requisitos de memoria de mi aplicación, por eso estoy pensando en cambiar de un array de 30 entradas (muchas de las cuales están vacías / NULL) a un std::map con la clave como enum y el valor como el puntero. De esta manera, solo tendré las entradas que necesito.

// Creo alrededor de 50 millones de objetos de mi clase
class mi_clase 
{
// Quiero cambiar esto
   mi_ptr* arr[30];
// a
   std::map<enum_type, mi_ptr*=""> mi_mapa;
};

Creo 50 millones de objetos de la clase anterior, así que tendré 50 millones de mapas como ese. Quiero entender el tamaño de un solo nodo de std::map. Leí que se implementan como árboles Rojo-Negro y cada nodo tendría punteros a los hijos, así que supongo que al menos son 16 bytes para los hijos y quizás 8 bytes más para almacenar el color. ¿Es mejor usar std::unordered_map aquí o debería probar una estructura de datos diferente?</enum_type,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en C++ y STL, sugeriría utilizar std::unordered_map en lugar de std::map en este escenario en particular.

    El tamaño de un único nodo de std::map dependería de la implementación y varía de un compilador a otro. Sin embargo, es cierto que std::map se implementa como un árbol rojo-negro, y cada nodo contiene punteros a hijos y datos adicionales como color, lo que puede contribuir al tamaño del nodo.

    Por otro lado, std::unordered_map almacena datos como una tabla hash y puede requerir menos memoria que std::map. Además, dado que te preocupa reducir los requisitos de memoria, std::unordered_map puede ser una elección más eficiente, ya que mantiene una complejidad de tiempo constante promedio para operaciones como inserción, eliminación y búsqueda.

    Sin embargo, cabe destacar que elegir una estructura de datos siempre implica un compromiso entre varios factores, como el uso de memoria, el rendimiento y la facilidad de implementación. Dependiendo de los requisitos exactos de tu aplicación, puede haber otras estructuras de datos que brinden un mejor rendimiento o eficiencia de memoria. Se recomienda analizar el caso de uso específico y experimentar con diferentes estructuras de datos para tomar una decisión informada.

Comments are closed.