Contamos con la respuesta a este asunto, al menos eso deseamos. Si sigues con inquietudes puedes dejar un comentario y sin pensarlo
Solución:
Sí, operator==
está correctamente definido para todos los contenedores estándar (excepto los contenedores no ordenados – basado en 23.2.5.2 del estándar), y generalmente hará una comparación lexicográfica. Ver por ejemplo aquí. La cita relevante:
Comprueba si los contenidos de lhs y rhs son iguales, es decir, si lhs.size() == rhs.size() y cada elemento en lhs tiene un elemento equivalente en rhs en la misma posición.
Ya que std::set
es un contenedor ordenado, cualquier conjunto con el mismo tamaño y los mismos elementos (dado que los comparadores son los mismos) necesariamente los tendrá en la misma posición, por lo que se compararán iguales.
Hay varias operaciones de configuración en el encabezado de la biblioteca estándar de C++
.
std::set_difference
da aquellos elementos que están en el conjunto 1 pero no en el conjunto 2.
std::set_intersection
da aquellos elementos que están en ambos conjuntos.
std::set_symmetric_difference
da aquellos elementos que aparecen en uno de los conjuntos pero no en ambos.
std::set_union
da aquellos elementos que están en el conjunto 1 o en el conjunto 2.
Los algoritmos anteriores también se pueden aplicar a contenedores STL que no sean std::set
pero los contenedores deben clasificarse primero (std::set
se ordena de forma predeterminada).
Otra forma sería esta:
template
bool set_compare(Set const &lhs, Set const &rhs)
return lhs.size() == rhs.size()
&& equal(lhs.begin(), lhs.end(), rhs.begin());
Inspirado en la elegante respuesta aquí.