0Pricing
C++ Academy · Lección

unordered_set

Elementos únicos basados en hash

unordered_set es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué es unordered_set?

std::unordered_set almacena elementos únicos en una tabla hash. En promedio, las comprobaciones de pertenencia tienen tiempo constante, pero no hay un orden definido.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3, 2, 1};
    std::cout << s.size() << " unique values\n";
    return 0;
}

set frente a unordered_set

Al igual que con los maps:

  • set: ordenado, O(log n).
  • unordered_set: no ordenado, O(1) en promedio.

Elija unordered_set para realizar comprobaciones de pertenencia lo más rápido posible.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> seen{"a", "b", "c"};
    std::cout << (seen.count("b") ? "yes" : "no") << '\n';
    return 0;
}

Insertar valores

insert() añade un elemento, lo ignora si ya está presente y devuelve un par cuyo .second indica si se añadió.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s;
    auto a = s.insert(5);
    auto b = s.insert(5);
    std::cout << std::boolalpha << a.second << ' ' << b.second << '\n';
    return 0;
}

Comprobaciones rápidas de pertenencia

Comprobar si ya ha visto un valor es el caso de uso clásico. count() devuelve 0 o 1.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> blocked{"spam", "junk"};
    std::cout << blocked.count("spam") << '\n';
    std::cout << blocked.count("ok") << '\n';
    return 0;
}

Borrar elementos

erase() elimina un valor y devuelve cuántos elementos se eliminaron (0 o 1).

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3};
    s.erase(2);
    std::cout << "count 2: " << s.count(2) << '\n';
    std::cout << "size: " << s.size() << '\n';
    return 0;
}

Detectar duplicados

Puede detectar el primer duplicado de un flujo insertando el valor y comprobando el resultado booleano.

#include <iostream>
#include <unordered_set>

int main() {
    int data[] = {3, 7, 1, 7, 9};
    std::unordered_set<int> seen;
    for (int x : data) {
        if (!seen.insert(x).second) {
            std::cout << "first duplicate: " << x << '\n';
            break;
        }
    }
    return 0;
}

Recorrer

El recorrido funciona, pero el orden no está especificado. Sume o procese los elementos sin suponer ninguna secuencia.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{10, 20, 30};
    int total = 0;
    for (int x : s) total += x;
    std::cout << "sum = " << total << '\n';
    return 0;
}

Eliminar duplicados de un rango

Construya un unordered_set a partir de un rango para eliminar duplicados rápidamente (sin conservar el orden).

#include <iostream>
#include <unordered_set>
#include <vector>

int main() {
    std::vector<int> v{1, 2, 2, 3, 3, 3};
    std::unordered_set<int> u(v.begin(), v.end());
    std::cout << u.size() << " unique\n";
    return 0;
}

find frente a count

find() le proporciona un iterador al elemento para que pueda seguir utilizándolo, mientras que count() solo indica si está presente.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> s{"alpha", "beta"};
    auto it = s.find("beta");
    std::cout << (it != s.end() ? *it : "none") << '\n';
    return 0;
}

Vaciar y comprobar si está vacío

clear() elimina todos los elementos y empty() comprueba si no queda ninguno.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3};
    s.clear();
    std::cout << std::boolalpha << s.empty() << '\n';
    return 0;
}

Intersección de conjuntos

Para encontrar los elementos comunes, recorra un conjunto y compruebe la pertenencia en el otro.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> a{1, 2, 3, 4};
    std::unordered_set<int> b{3, 4, 5};
    for (int x : a) if (b.count(x)) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Comprobación rápida

Compruebe su comprensión de unordered_set.

Resumen

Ha aprendido que std::unordered_set:

  • almacena elementos únicos con operaciones O(1) en promedio
  • no tiene un orden garantizado
  • es ideal para realizar comprobaciones rápidas de pertenencia y detectar duplicados

A continuación, aprenderá a aplicar hash a sus propios tipos personalizados.

Preguntas frecuentes

¿La lección «unordered_set» es gratis?

Sí — el texto completo de «unordered_set» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «unordered_set»?

Elementos únicos basados en hash Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «unordered_set»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. std::unordered_map
  2. unordered_set
  3. Funciones hash personalizadas
  4. Consideraciones de rendimiento
← Volver a C++ Academy