La forma estándar de intersección de dos conjuntos en C++ es hacer lo siguiente:-C++ establecer intersección
std::set<int> set_1; // With some elements
std::set<int> set_2; // With some other elements
std::set<int> the_intersection; // Destination of intersect
std::set_intersection(set_1.begin(), set_1.end(), set_2.begin(), set_2.end(), std::inserter(the_intersection, the_intersection.end()));
¿Cómo voy a ir haciendo un conjunto de intersección en el lugar? Es decir, quiero que set_1 tenga los resultados de la llamada a set_intersection. Obviamente, puedo hacer un set_1.swap(the_intersection)
, pero esto es mucho menos eficiente que intersectar en el lugar.
Los continuos son redundantes, y me gustaría reorganizarlos para que sean 'if (* it1 <* it2) else if (* it2 <* it1) else ...' de modo que el único operador de comparación que está utilizando sea menor que - así es como funciona 'set '. –
¡Correcto! Porque es if-else if, etc. Estaba pensando que los siguientes condicionales serían verificados. Gracias, editaré la respuesta. – ChrisInEdmonton
'set_1.erase (it1 ++)' es incorrecto para algunos contenedores (como vector), incluso si es válido en su caso. Debe usar 'it1 = set_1.erase (it1)' que sea válido con todos los contenedores. –