RE:Operaciones con conjuntos
Yo te podría ayudar. De hecho no es algo muy complicado. Tienes dos conjuntos A,B, que supongamos son instancias de std::set para mayor comodidad. Entonces tenemos los siguientes algoritmos:
1. Union. Copias todos los elementos de B a A. std::set se encargará de eliminar los duplicados. A U B <=> x E A ó x E B.
2. Intersección. Iteras sobre A, y a cada elemento de A verificas que está en B. Si sí lo está, este elemento lo insertas en un conjunto auxiliar C. A intersección B <=> x E A y x E B.
3. Complemento. Iteras sobre todo A, y si a un elemento de A encuentras que está en B, lo eliminas del conjunto A. A - B = x E A y x ~E B.
Para manejar álgebra de conjuntos, es lo mismo, sólo que aplicado varias veces. Por ejemplo, A U B U C para A,B,C conjuntos. Primero calculas A U B, y sobre ese resultado, operas la unión con C.
Si std::set::size == 0, tienes tu conjunto vacío.
La operación con conjuntos es muy empleada en las bases de datos. Por ejemplo, cuando haces un select: select * from tabla where campo1 = 'A', estás obteniendo un subconjunto de la tabla. Cuando haces joins, buscas la intersección entre conjuntos.
Finalmente, conceptos más avanzados de conjuntos como la potencia (todos los subconjuntos posibles de un conjunto dado), las relaciones (todos los subconjuntos posibles del producto cartesiano entre dos conjuntos dados) o la cardinalidad de conjuntos (existe una función I_n:|N-->A inyectiva tal que f(n) = a_n con a_n E A, donde |N son los naturales), sobre todo si estos son infinitos o más grandes que la capacidad de memoria, pues sí se necesita mucho más desarrollo, sobre todo a nivel semántico.
En fin, me encantan los conjuntos =), de hecho yo voy para topología. En fin, más dudas o caso más concreto, me avisas.