2011-06-06 25 views
56

¿Hay alguna manera de comparar dos vectores?C++: Comparando dos vectores

if (vector1 == vector2) 
    DoSomething(); 

Nota: En la actualidad, estos vectores no están ordenados y contienen valores enteros.

+2

¿Eso no compila? – Maxpm

+23

¿Quiere decir que quiere comparar * independientemente del orden de los elementos en el vector? De lo contrario, el código anterior debería funcionar. – Naveen

+1

Una manera simple de comparar si tiene dos matrices sin clasificar que desea verificar que contengan exactamente los mismos valores, es ** ordenarlas **, y luego usar cualquiera de los métodos de biblioteca estándar para hacer una comparación. – darvids0n

Respuesta

27

Verificar std::mismatch método de C++.

vectores comparando ha sido discutido en el foro DaniWeb y también respondido.

C++: Comparing two vectors

Verificar el siguiente SO puesto. será útil para usted han logrado lo mismo con el método different-2.

Compare two vectors C++

+0

¿Eso requiere que se ordene el rango? – Naveen

+0

@Naveen: compruebe el segundo enlace ... – Jhaliya

+2

'lexicographical_compare' funciona también aquí, y elimina tener que tratar con qué rango es el rango más largo. –

1

Si realmente absolutamente tienen que permanezcan sin ordenar (que en realidad no lo hacen .. y si usted está tratando con cientos de miles de elementos, entonces tengo que preguntar por qué se comparará como vectores esto), puedes hackear juntos un método de comparación que funciona con matrices no ordenadas.

La única manera de que aunque, al hacerlo era crear un temporal vector3 y pretender hacer un set_intersection añadiendo todos los elementos de vector1 a ella, a continuación, hacer una búsqueda de cada elemento individual de vector2 en vector3 y retirar, si es encontró. Sé que suena terrible, pero es por eso que no estoy escribiendo ninguna biblioteca estándar de C++ pronto.

Realmente, solo, ordénelos primero.

+0

o se pueden crear dos objetos 'set' y compararlos? ¿No sería más fácil si realmente se requiere no tocar los vectores? – Naveen

+0

Depende de cuán rápidas son las operaciones de búsqueda y eliminación N en un vector ('N * O (N)') versus 2 constructores de conjuntos que clasifican N elementos (la referencia de cplusplus.com dice "Para secuencias sin clasificar, linearitmica (N * logN). . ") + una comparación ordenada (' O (N) '). – darvids0n

52

Su código (vector1 == vector2) es la sintaxis correcta de C++. Hay un operador == para vectores.

Si desea comparar un vector corto con una parte de un vector más largo, puede usar el operador equal() para vectores. (documentation here)

He aquí un ejemplo:

using namespace std; 

if(equal(vector1.begin(), vector1.end(), vector2.begin())) 
    DoSomething(); 
+2

std :: equal() también es válido para arreglos simples, mientras que el operador de igualdad no es, por ejemplo: int a [1000], b [1000]; if (std :: igual (a, a + 1000, b)) DoSomething(); –