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.
Echa un vistazo a set_difference() y set_intersection() . En ambos casos, debe ordenar sus contenedores de antemano.
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.