¿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.
¿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.
Verificar std::mismatch
método de C++.
vectores comparando ha sido discutido en el foro DaniWeb y también respondido.
Verificar el siguiente SO puesto. será útil para usted han logrado lo mismo con el método different-2.
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.
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
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
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();
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(); –
¿Eso no compila? – Maxpm
¿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
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