0Pricing
C++ Academy · Lección

std::set

Elementos únicos ordenados

std::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 std::set?

std::set almacena elementos únicos en orden ascendente. No hay duplicados y las búsquedas se ejecutan en tiempo logarítmico.

  • Las claves también son los valores.
  • Es ideal para comprobar pertenencia y eliminar duplicados.
#include <iostream>
#include <set>

int main() {
    std::set<int> s{3, 1, 2, 1, 3};
    for (int x : s) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Insertar valores

Use insert() para añadir elementos. La inserción de un valor que ya existe simplemente se ignora.

#include <iostream>
#include <set>

int main() {
    std::set<std::string> s;
    s.insert("apple");
    s.insert("banana");
    s.insert("apple");
    std::cout << s.size() << " unique items\n";
    return 0;
}

Valor devuelto por insert

insert() devuelve un pair cuyo .second es un bool que indica si la inserción se realizó realmente.

#include <iostream>
#include <set>

int main() {
    std::set<int> s{1, 2};
    auto r = s.insert(2);
    std::cout << std::boolalpha << "inserted: " << r.second << '\n';
    auto r2 = s.insert(5);
    std::cout << "inserted: " << r2.second << '\n';
    return 0;
}

Comprobar la pertenencia

Use count() o contains() de C++20 para comprobar si un valor está presente.

#include <iostream>
#include <set>

int main() {
    std::set<int> s{10, 20, 30};
    std::cout << s.count(20) << '\n';
    std::cout << s.count(99) << '\n';
    return 0;
}

Buscar elementos

find() devuelve un iterador al elemento coincidente o end() cuando no está presente.

#include <iostream>
#include <set>

int main() {
    std::set<std::string> s{"red", "green", "blue"};
    auto it = s.find("green");
    std::cout << (it != s.end() ? "found" : "missing") << '\n';
    return 0;
}

Eliminar elementos

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

#include <iostream>
#include <set>

int main() {
    std::set<int> s{1, 2, 3, 4};
    s.erase(3);
    for (int x : s) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Orden ascendente

Los elementos siempre se recorren en orden ascendente, independientemente de cómo se hayan insertado.

#include <iostream>
#include <set>

int main() {
    std::set<int> s{50, 10, 40, 20, 30};
    for (int x : s) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Eliminar duplicados

Introducir valores en un set es una forma rápida de eliminar duplicados y ordenarlos al mismo tiempo.

#include <iostream>
#include <set>
#include <vector>

int main() {
    std::vector<int> v{4, 2, 4, 1, 2, 3, 1};
    std::set<int> unique(v.begin(), v.end());
    for (int x : unique) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

lower_bound y upper_bound

Como el set está ordenado, lower_bound() y upper_bound() permiten encontrar rangos de forma eficiente.

#include <iostream>
#include <set>

int main() {
    std::set<int> s{10, 20, 30, 40, 50};
    auto lo = s.lower_bound(20);
    auto hi = s.upper_bound(40);
    for (auto it = lo; it != hi; ++it) std::cout << *it << ' ';
    std::cout << '\n';
    return 0;
}

Tamaño y limpieza

size() informa del número de elementos, empty() comprueba si no hay ninguno y clear() los elimina todos.

#include <iostream>
#include <set>

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

Inserción de rangos

Puede insertar un rango completo procedente de otro contenedor; los duplicados se eliminan y los elementos se ordenan automáticamente.

#include <iostream>
#include <set>

int main() {
    std::set<int> s{1, 2, 3};
    int more[] = {3, 4, 5};
    s.insert(more, more + 3);
    for (int x : s) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Comprobación rápida

Compruebe su comprensión del comportamiento de std::set.

Resumen

Ha aprendido que std::set:

  • contiene valores únicos y ordenados
  • ignora silenciosamente las inserciones duplicadas
  • admite find, count, erase y las consultas ordenadas lower_bound/upper_bound

A continuación, conocerá multimap y multiset, que permiten duplicados.

Preguntas frecuentes

¿La lección «std::set» es gratis?

Sí — el texto completo de «std::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 «std::set»?

Elementos únicos ordenados 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 «std::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::map
  2. std::set
  3. multimap y multiset
  4. Comparadores personalizados
← Volver a C++ Academy