Me preguntaba si hay alguna función para comparar dos vectores de cadena para devolver el número de elementos diferentes (o el mismo)? O tengo que iterar sobre ambos y probar elemento por elemento.
Gracias.Comparar dos vectores C++
Respuesta
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<string> v3;
std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));
O, si usted no desea ordenar:
std::set<string> s1(v1.begin(), v1.end());
std::set<string> s2(v2.begin(), v2.end());
std::vector<string> v3;
std::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(v3));
Es posible que desee utilizar un conjunto múltiple si podría haber duplicados en un vector.
buen pensamiento :) – Kobe
OK, solo necesito agregar #include
No conozco una función existente, pero escribir una usted mismo no debería ser un problema.
int compare(const vector<string>& left, const vector<string>& right) {
auto leftIt = left.begin();
auto rightIt = right.begin();
auto diff = 0;
while (leftIt != left.end() && rightIt != right.end()) {
if (*leftIt != *rightIt) {
diff++;
}
leftIt++;
rightIt++;
}
// Account for different length vector instances
if (0 == diff && (leftIt != left.end() || rightIt != right.end())) {
diff = 1;
}
return diff;
}
Notas
- omitida
std::
prefijo para mayor brevedad - Esta función necesita ser actualizado si se debe manejar
vector<string>
casos de diferentes longitudes
Gracias, pensé que necesito implementar uno ... por cierto sobre su código, ¿hay alguna razón específica por la que usa el auto para sus variables locales? :) nunca vio auto usado hasta ahora – Kobe
@vBx, en C++ 0x 'auto' se volvió a proponer para la inferencia de tipo. En los usos 'auto' anteriores, el compilador puede inferir el tipo para mí, así que no tengo que escribir el' vector
Podemos hacerlo mejor con count_if() podemos. –
Tenga una mirada en set_difference() y set_intersection() . En ambos casos, debe tener sus contenedores ordenados de antemano.
gracias los miraré – Kobe
- 1. C++: Comparando dos vectores
- 2. ¿Cómo comparar vectores con Boost.Test?
- 3. Comparar dos XmlNodes en C#
- 4. Cómo comparar dos X509Certificate2 C#
- 5. ¿Cómo obtengo caracteres comunes a dos vectores en C++?
- 6. "mover" dos vectores juntos
- 7. C#: comparar el contenido de dos IEnumerables
- 8. Comparar (y fusionar) dos proyectos VS C#
- 9. Comparar dos valores de estructuras en C#
- 10. Al comparar dos valores hexadecimales en C++
- 11. "Bloqueando" dos vectores y ordenándolos
- 12. Cómo comparar vectores de caracteres para coincidencias parciales en R
- 13. Comparando dos vectores en una declaración if
- 14. ¿Cómo comparar dos vectores usando SIMD y obtener un solo resultado booleano?
- 15. comparar dos vectores en clojure sin importar el orden de los elementos
- 16. comparar dos vectores de longitudes desiguales para obtener una matriz lógica
- 17. Alternar, entrelazar o entrelazar dos vectores
- 18. Calcular el producto escalar de dos vectores en C++
- 19. C o C++. ¿Cómo comparar dos cadenas dadas char * punteros?
- 20. postgres - comparar dos matrices
- 21. ¿Cómo comparar dos NSIndexPaths?
- 22. comparar dos tipos
- 23. comparar dos impulso :: función
- 24. Java comparar dos listas
- 25. Comparar dos NSDates
- 26. pitón: comparar dos cadenas
- 27. Comparar dos archivos
- 28. ¿Cómo comparar dos consultas?
- 29. Cómo comparar dos fechas
- 30. Comparar dos UIImages
¿Necesita comparar solo los elementos con el mismo índice o tiene el algoritmo para detectar coincidencias en diferentes posiciones? –
necesita detectar coincidencias sí – Kobe
¿Cómo detectaría las coincidencias en diferentes posiciones para todos los elementos? En ese caso, la cantidad de vectores es irrelevante. ¿Estás seguro de que eso es lo que quieres? –