vectores unión simetrica realizar programacion programa para operaciones obtener lenguaje intersección interseccion diferencia conjuntos con ayb c++ stl set stdset set-difference

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.

SGI - set_difference

¿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);

http://www.sgi.com/tech/stl/set_difference.html


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.