Saltar al contenido

cómo comparar dos std::set?

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::setpero 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í.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *