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. Comparar dos valores de estructuras en C#
- 8. C#: comparar el contenido de dos IEnumerables
- 9. Al comparar dos valores hexadecimales en C++
- 10. Comparar (y fusionar) dos proyectos VS 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. Cómo comparar dos fechas
- 21. comparar dos impulso :: función
- 22. ¿Cómo comparar dos NSInteger?
- 23. comparar dos ArrayList
- 24. Comparar dos NSStrings
- 25. comparar dos tipos
- 26. ¿Cómo comparar dos consultas?
- 27. ¿Comparar dos hashsets?
- 28. ¿Cómo comparar dos NSIndexPaths?
- 29. Comparar dos UIImages
- 30. pitón: comparar dos cadenas
¿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? –