2009-11-14 460 views
6

Tengo un par de preguntas acerca de cómo utilizar C++ conjuntos (std :: set)Conseguir unión, intersección, o diferencia de conjuntos en C++

  1. ¿Hay una manera de conseguir la unión, intersección, o diferencia de dos conjuntos de C++? (Es bastante fácil escribir mi propia función para hacer eso, pero quería saber si había una función incorporada)

  2. ¿Se pueden utilizar los juegos de C++ como claves en un mapa?

Respuesta

16

Utilice las funciones set_difference(), set_union(), set_intersection() y set_symmetric_difference().

Los conjuntos y mapas admiten cualquier tipo de clave que se pueda comparar. Por defecto, esto significa que el tipo tiene operator<() definido, pero puede proporcionar su propio comparador. Los conjuntos de C++ no tienen definido operator<() y, por lo tanto, no pueden utilizarse como claves a menos que proporcione su propio comparador.

+0

Y es probable que no desee proporcionar su propio comparador a menos que pueda encontrar una manera de averiguar qué conjunto es "menor que" el otro rápidamente, es decir, * sin * leer todos sus miembros, lo que podría ser muy lento para un gran conjunto. – quark

3

Se puede usar cualquier cosa como clave en un mapa, siempre que proporcione una clase o función que pueda compararlos. Here es un ejemplo.

Cuestiones relacionadas