unión - Diferencia de conjunto c++ STL
realizar un programa en c para obtener la unión intersección y diferencia de dos conjuntos ayb (8)
Aparentemente, lo hace.
¿La estructura de datos del conjunto STL de C ++ tiene un operador de diferencia establecida?
No como un método, pero está la función del algoritmo externo set_difference
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
No es un "operador" en el sentido del lenguaje, pero existe el algoritmo set_difference en la biblioteca estándar:
http://www.cplusplus.com/reference/algorithm/set_difference.html
Por supuesto, las otras operaciones de conjunto básico también están presentes (unión, etc.), como sugiere la sección "Ver también" al final del artículo vinculado.
Sí, hay una función set_difference en el encabezado de los algoritmos.
Ediciones:
FYI, la estructura de datos establecida es capaz de usar eficientemente ese algoritmo, como se indica en su documentación . El algoritmo también funciona no solo en conjuntos sino en cualquier par de iteradores sobre colecciones ordenadas.
Como otros han mencionado, este es un algoritmo externo, no un método. Presumiblemente eso está bien para su aplicación.
La respuesta elegida es correcta, pero tiene algunos errores de sintaxis.
En lugar de
#include <algorithms>
utilizar
#include <algorithm>
En lugar de
std::insert_iterator(result, result.end()));
utilizar
std::insert_iterator<set<int> >(result, result.end()));
Sí, lo hay, está en <algorithm>
y se llama: std::set_difference
. El uso es:
#include <algorithm>
#include <set>
#include <iterator>
// ...
std::set<int> s1, s2;
// Fill in s1 and s2 with values
std::set<int> result;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
std::inserter(result, result.end()));
Al final, el result
del conjunto contendrá el s1-s2
.
podemos simplemente usar
set_difference(set1.begin(), set1.end(), set2.begin(). set2,end(),std::back_inserter(result)).
Una vez más, impulso al rescate:
#include <string>
#include <set>
#include <boost/range/algorithm/set_algorithm.hpp>
std::set<std::string> set0, set1, setDifference;
boost::set_difference(set0, set1, std::inserter(setDifference, setDifference.begin());
setDifference contendrá set0-set1.