¿La estructura de datos de conjunto de C++ STL tiene un operador de diferencia de conjunto?C++ diferencia de conjunto de STL
Respuesta
Sí, hay una función set_difference en el encabezado de los algoritmos.
ediciones:
su información, la estructura de datos del conjunto son capaces de utilizar de manera eficiente que el algoritmo, como se ha dicho en su documentation. El algoritmo también funciona no solo en conjuntos sino en cualquier par de iteradores sobre colecciones ordenadas.
Como han mencionado otros, este es un algoritmo externo, no un método. Presumiblemente eso está bien para su aplicación.
como método pero no el algoritmo set_difference función externa
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
Al parecer, lo hace.
un "operador" en el sentido del lenguaje, pero no es el algoritmo set_difference en la biblioteca estándar:
http://www.cplusplus.com/reference/algorithm/set_difference.html
Por supuesto, las otras operaciones de conjuntos básicos están presentes también - (unión, etc.), como lo sugiere la sección "Ver también" al final del artículo vinculado.
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 conjunto result
contendrá el s1-s2
.
+1. Lamentablemente, cuando lo necesitaba, me daba por vencido y hacía mi propio bucle :( – peterchen
BTW, si usa set_difference en una clase de contenedor no asociativo, digamos un vector, asegúrese de que los elementos en ambos contenedores estén ordenados primero ... ? – paxos1977
# include
La respuesta elegida es correcta, pero tiene algunos errores de sintaxis.
En lugar de
#include <algorithms>
uso
#include <algorithm>
En lugar de
std::insert_iterator(result, result.end()));
uso
std::insert_iterator<set<int> >(result, result.end()));
o simplemente use' std :: inserter (result, result.end()) ' – rlbond
¿podemos utilizar
set_difference(set1.begin(), set1.end(), set2.begin(). set2,end(),std::back_inserter(result)).
' std :: back_inserter' requires el método 'push_back()' en el 'resultado' del contenedor de destino. Esto no funcionará si 'result' es un' std :: set' – Attila
Una vez más, aumentar 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.
C++ no define un operador de diferencia de conjuntos, pero se puede definir su propio (usando el código dado en otras respuestas):
template<class T>
set<T> operator -(set<T> reference, set<T> items_to_remove)
{
set<T> result;
std::set_difference(
reference.begin(), reference.end(),
items_to_remove.begin(), items_to_remove.end(),
std::inserter(result, result.end()));
return result;
}
- 1. STL + Conjunto ordenado + sin duplicados
- 2. conjunto STL intersección y la salida
- 3. C++ Pregunta STL: asignadores
- 4. C equivalente de C++ STL
- 5. cómo insertar en el conjunto stl?
- 6. ¿Debo aleatoriamente mezclar antes de insertar en el conjunto STL?
- 7. Iteradores en C++ (stl) vs Java, ¿hay alguna diferencia conceptual?
- 8. C++ STL :: ¿cuál es la diferencia entre inplace_merge y sort
- 9. Eliminación de elementos del conjunto de STL al iterar
- 10. elemento de borrado máximo del conjunto de STL
- 11. Almacenar objetos en el vector STL - conjunto mínimo de métodos
- 12. C++ sin STL
- 13. C++ UNICODE y STL
- 14. Búsqueda binaria C++ STL
- 15. C++ STL con jemalloc
- 16. RAII y C++ STL
- 17. C error STL ++ quitar
- 18. C Analógico a STL
- 19. C++: STL multimap.equal_range()
- 20. Arrays dinámicos vs vectores STL ¿diferencia exacta?
- 21. curso de actualización de C++ y STL
- 22. ¿Cuál es la diferencia entre el conjunto <pair> y el mapa en C++?
- 23. Alineación de estructuras C++ y vectores STL
- 24. Uso de STL con Android NDK C++
- 25. Depuración de contenedores C++ STL en Windbg
- 26. Solución de problemas en C++ con STL
- 27. C++ String de STL para datos binarios
- 28. Cómo vincular STL en código de C++?
- 29. ¿Estándares de Java/C++ STL equivalentes?
- 30. ¿Cómo iterar sobre un conjunto STL y eliminar selectivamente elementos?
Es utilizable en _cualquier_ par de recipientes ordenados. – xtofl
Buen punto ... He agregado una nota en las ediciones. –