2010-11-01 8 views

Respuesta

35

Prueba esto:

if (std::includes(set_one.begin(), set_one.end(), 
        set_two.begin(), set_two.end())) 
{ 
// ... 
} 

Sobre includes().

La incluye() algoritmo compara dos secuencias ordenados y devuelve verdadero si cada elemento en el rango [start2, finish2) está contenido en el intervalo [start1, Fin1). Devuelve falso de lo contrario. includes() supone que las secuencias se ordenan usando el operador <(), o usando el predicado comp.

carreras en

como máximo ((Fin1 - start1) + (finish2 - start2)) * 2 - 1 se realizan comparaciones.

Plus O (nlog (n)) para la clasificación de vectores. No lo obtendrás más rápido que eso.

+0

Creo std :: set_intersection realizará lo mismo que el anterior (es decir, (2 * (count1 + count2)) - 1 operaciones) – Nim

+3

Bueno, el peor caso es el mismo, pero si el resultado es falso el include hará su trabajo mucho mas rápido. Y también usas un vector más en la intersección. Como los nombres sugieren set_intersection se debe usar para encontrar esa intersección e incluye para verificar si un conjunto es un subconjunto de otro. – Klark

+2

si sus datos están en 'std :: set' puede usar' std :: set_difference' –

Cuestiones relacionadas