La biblioteca estándar de C++ es una herramienta poderosa que a menudo se subestima. Todo el mundo conoce vector, map y string, pero STL (Standard Template Library) no se trata solo de contenedores básicos.
Hoy, Kodik mostrará poco conocidos, pero características de STL muy útilesque mejoren tu código, lo hagan más limpio y más corto 💪

🔍 1. std::accumulate — agregación compacta
En lugar de un ciclo manual para calcular la suma de números:
int sum = 0;
for (int x : v) sum += x;Puedes simplemente:
#include <numeric>
int sum = std::accumulate(v.begin(), v.end(), 0);
🌀 2. std::transform — enfoque funcional
¿Necesitas aplicar la operación a cada elemento? No escribas un ciclo, usa transform:
std::vector<int> result;
std::transform(v.begin(), v.end(), std::back_inserter(result), [](int x) {
return x * 2;
});🧩 3. std::any y std::variant — almacenamiento de cualquier tipo
std::variant<int, std::string> val = "Hello";
if (std::holds_alternative<std::string>(val)) {
std::cout << std::get<std::string>(val);
}🧱 4. std::unordered_map y std::unordered_set — el poder de las tablas hash
Cuando usas std::map y std::set normales, bajo el capó funciona árbol binario equilibrado (por lo general, rojo-negro). Esto significa que las operaciones de inserción, búsqueda y eliminación toman O(log n) tiempo.
Pero std::unordered_map y std::unordered_set están organizados de manera diferente: usan tablas hash. Debido a esto, proporcionan dificultad media de las operaciones — O(1). Esto los hace mucho más rápido en la mayoría de las tareas aplicadas, especialmente con grandes cantidades de datos.
🔥 Ejemplo:
#include <unordered_map>
#include <string>
#include <iostream>
int main() {
std::unordered_map<std::string, int> scores;
scores["Alice"] = 90;
scores["Bob"] = 75;
std::cout << scores["Alice"]; // 90
}
A diferencia de std::map, unordered_map no garantiza el orden de los elementos. Si no te importa en qué orden se almacenan los datos, utiliza unordered_-versiones para un rendimiento máximo.
🧠 ¿Cuándo usarlo?
¿Necesitas mantener el orden? | Usa |
|---|---|
Sí |
|
No |
|
🧵 5. std::ranges (a partir de C++20)
#include <ranges>
auto result = v
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * x; });Permite escribir cadenas de operaciones de forma bonita y compacta.
🤯 Bonus: qué más hay en STL
std::optional— una alternativa segura a los "valores mágicos"std::span— transmisión conveniente de rangosstd::bitset— trabajo compacto con banderasstd::invoke- llamada de cualquier función, incluidas las funciones de miembro
Si quieres aprender a usar STL en tareas reales, descarga aplicación Kodik. Allí te esperan:
🧠 Lecciones interactivas de C++
✅ Ejercicios con comprobación de soluciones
💬 Comunidad de desarrolladores
Aprende a programar no solo, sino con el apoyo y nuestro Canal de Telegram 💙
