programación lista linked library lenguaje estándar biblioteca c++ stl

linked - lista c++ stl



Compara dos vectores C++ (3)

Me preguntaba si hay alguna función para comparar 2 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.



No sé de una función existente, pero escribir una tú mismo no debería ser demasiado 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

  • Omitido std:: prefijo para brevedad
  • Esta función debe actualizarse si debe manejar instancias vector<string> de diferentes longitudes

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 no quieres 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 multiset si hay duplicados en un vector.