Saltar al contenido

Biblioteca estándar de C++: Contenedores asociativos

Descripción

Los programas informáticos no triviales necesitan almacenar datos y procesarlos. Desarrollar estructuras y contenedores de datos desde cero en C++ es una tarea desalentadora y propensa a los errores. De hecho, habría que considerar aspectos avanzados como la memoria manual y la gestión de recursos, el manejo adecuado de los casos de esquina sutiles, la escritura tanto de código genérico como de código optimizado para casos especiales, y así sucesivamente. Además, hay algunas estructuras de datos como árboles de búsqueda binaria equilibrada o tablas hash que son muy útiles en las aplicaciones; sin embargo, definitivamente no es trivial implementar desde cero.

Biblioteca estándar de C++: Contenedores asociativos
Biblioteca estándar de C++: Contenedores asociativos

Afortunadamente, la Biblioteca Estándar C++ ya ofrece contenedores de alta calidad, eficientes y bien probados. Es un placer desarrollar código C++ reutilizándolos: de hecho, utilizar estos contenedores en tu código C++ aumentará tu productividad, ya que la Librería Estándar C++ te ofrece en un plato implementaciones de alta calidad de estructuras de datos comunes y útiles que puedes aprovechar fácilmente en tu código C++. Los mantenedores de la Librería Estándar C++ pasan horas mirando estas estructuras de datos, y mejorando, refinando y optimizando su código de implementación de C++. En este curso, C++ Standard Library: Contenedores Asociativos, aprenderá cómo reutilizar simplemente ese tesoro en sus propias aplicaciones C++.

Primero, explorará std::map, que es un contenedor asociativo muy versátil y conveniente que puede utilizar cuando necesite asociar algunas claves únicas a valores adicionales. Esto puede ser útil en muchas aplicaciones, desde diccionarios de traducción, hasta programas de gráficos de computadora y bases de datos.

A continuación, descubrirá operaciones importantes, como la inserción, la eliminación y la búsqueda de elementos. Primero las verás descritas en teoría usando diapositivas, incluyendo una discusión de su complejidad de tiempo de ejecución asintótica. Luego, también los verás en acción en un código de demostración práctica. También tocará cómo lograr un rendimiento aún mejor que std::map, usando std::unordered_map. Verán que eso tiene un costo, como la pérdida de orden de los elementos que está garantizada por std::map. Luego, verán un práctico código de demostración con un benchmark que compara std::unordered_map vs. std::map el rendimiento en acción.

Por último, aprenderá a almacenar fácilmente elementos únicos en un contenedor específico, manteniendo el orden de los elementos. Esto es posible usando std::set. Verá cómo almacenar objetos personalizados en std::set, incluyendo cómo corregir un sutil error. Espero que discutir los sutiles bugs que son especialmente frecuentes para aquellos que empiezan a aprender los contenedores de la Librería Estándar de C++ les ahorrará un tiempo precioso y un dolor de cabeza durante su programación en C++. Para seguir este curso de forma competente, sólo necesitas un conocimiento básico de las características del lenguaje C++. También necesitas conocer algunos elementos arquitectónicos básicos de la Librería Estándar de C++, como los iteradores, que se describen en mi «Librería Estándar de C++»: Contenedores secuenciales».
Después de completar este curso, podrá usar contenedores asociativos de la Biblioteca Estándar de C++ de alta calidad, eficientes y bien probados, como std::map, std::unordered_map y std::set en su propio código de C++. Tendrás un conocimiento práctico sobre ellos, y serás capaz de hacer un juicio apropiado sobre la elección de uno u otro basado en el problema en cuestión. También tendrás conocimientos sobre importantes operaciones comunes con estos contenedores asociativos estándar, como insertar, quitar y buscar elementos.