Contenedores de la STL

vector a fondo, deque, list, stack, queue, priority_queue, set, map, unordered_map e iteradores: cada contenedor dibujado en vivo.

14 aulas · 12 horas de práctica · en el navegador, sin instalar nada

Temario

  1. Qué es la STL — El vector que venís usando no es parte del lenguaje: viene de una biblioteca, la STL. Todos sus contenedores hablan el mismo idioma: size, empty, push_back, front, back y el for de recorrer.
  2. vector a fondo: capacidad y reserve — Un vector guarda todo en un solo bloque de memoria. Cuando se llena, pide uno más grande, copia todo y devuelve el viejo: la mudanza. Se ve en el depósito, y reserve la evita.
  3. deque y list — Un vector es lento para meter algo adelante. deque crece por las dos puntas, y list es una cadena de vagones: meter o sacar en el medio no mueve a nadie, pero no tiene [].
  4. stack — Un mazo sobre la mesa: se pone arriba, se mira arriba, se saca de arriba. stack es eso y nada más, y justamente por eso sirve: para deshacer, para dar vuelta y para todo lo que es "el último que entró sale primero".
  5. queue — La fila del banco: se entra por atrás y se atiende por adelante. queue es un deque que solo deja hacer eso, y es la estructura de todo lo que se atiende por orden de llegada.
  6. priority_queue — El restaurante se prende fuego: ya no importa quién llegó primero, sino qué se quema más. priority_queue siempre tiene arriba al más grande, y con greater o un operator< propio, al que vos digas.
  7. set — Un testigo vio a Dario dos veces, pero Dario es un solo sospechoso. set guarda cada valor una sola vez, siempre ordenado, y responde "¿está?" sin recorrer todo.
  8. map — Un diccionario de verdad: buscás por el nombre y encontrás el dato. map guarda pares clave → valor ordenados por clave, y su [] tiene una trampa famosa: si la clave no está, la inventa.
  9. unordered_map y hashing — Un map sin orden, pero más rápido: unordered_map convierte cada clave en un número (su hash) y va derecho al balde. El mismo truco sella una cadena de bloques: si alguien toca un dato, el sello cambia.
  10. pair, tuple y multimap — Dos o tres datos que viajan juntos sin armar un struct: pair y tuple. Se comparan campo por campo, así que un set de pares ordena solo. Y multimap: un map donde una clave puede tener varios valores.
  11. Iteradores — Un vector se recorre con índices, pero un list, un set o un map no tienen [i]. El iterador es la forma de caminar que tienen todos: begin, end, *it y ++it. Es lo que usa por dentro el for de siempre.
  12. Iteradores invalidados: el bug clásico — Borrás un elemento mientras recorrés, hacés ++it, y el que venía después se escapa. El iterador quedó marcando un lugar que ya no es. Cómo pasa en cada contenedor, y el patrón que no falla: it = erase(it).
  13. Taller: Turnos del hospital — La guardia de un hospital, contenedor por contenedor: la sala de espera es una cola, el triage una cola de prioridad, los anotados dos veces se filtran con un set y cada consultorio tiene su propia sala.
  14. Taller: El inventario de un RPG — Un RPG de forja: el botín entra a un inventario (un map), las recetas son un map de maps, los encargos del rey salen por poder de una priority_queue, y cada golem forjado sale a la cinta.

Es parte de