Tengo un vector<MyType>
y me gustaría tener otro vector<MyType>
que contenga solo aquellos MyTypes que cumplan con algunos criterios simples, p. que algún miembro de datos es igual a algo ¿Cuál es la mejor manera de resolver esto?Cómo filtrar o "grep" un vector C++?
8
A
Respuesta
17
Uso copy_if
:
#include <algorithm> // for copy_if
#include <iterator> // for back_inserter
std::vector<MyType> v2;
std::copy_if(v1.begin(), v1.end(), std::back_inserter(v2),
[](MyType const & x) { return simple_citerion(x); });
7
El uso de un poco de impulso, se puede:
std::vector<int> v = {1,2,-9,3};
for (auto i : v | filtered(_arg1 >=0))
std::cout << i << "\n";
este ejemplo se utiliza Phoenix por lambdas implícitas definidas por plantilla de expresión (_arg1 >= 0
), pero se puede utilizar cualquier invocable (C++ 03 o superior) con adaptadores Boost (montados, transformados, invertidos, etc.)
Consulte aquí para obtener más material de presentación y un completo l ejemplo:
+0
Otra buena forma, y puede ampliar Boost.Range para crear un nuevo vector a partir del resultado filtrado, si lo necesita, sin guardar el resultado en un temporal. – Xeo
Cuestiones relacionadas
- 1. C++ Para filtrar un vector de clase usando el algoritmo
- 2. Matlab, cómo filtrar un vector numérico por una condición?
- 3. Filtrar un marco de datos en un vector
- 4. Usando grep con expresión regular para filtrar coincidencias
- 5. C++ ampliar un vector con otro vector
- 6. ¿Cómo revertir un vector de C++?
- 7. cómo inicializar un vector en C++
- 8. std vector C++ - copia profunda o superficial
- 9. Cómo filtrar un vector de cadenas en R basado en cadena que coincide con
- 10. Usar grep para filtrar palabras de un archivo de palabras vacías
- 11. Solaris - grep con funcionalidad O
- 12. Reutilizando un vector en C++
- 13. inicializando un vector de vector <doubles> C++
- 14. ¿Cómo puedo particionar un vector?
- 15. ¿cómo grep en R?
- 16. Filtrar valores de un C# Diccionario genérico
- 17. ¿Cómo funciona C++ std :: vector?
- 18. ¿Cómo hacer std :: vector de otro vector con filtro específico?
- 19. rellenando un vector o matriz de impulso
- 20. CopyOnWriteArray o Vector
- 21. C++ cómo copiar un mapa en un vector
- 22. un vector dinámico de C a R
- 23. C++ list/vector help
- 24. sizeof() std :: vector (C++)
- 25. C++ Get Vector type
- 26. C++ remove_if en un vector de objetos
- 27. Cómo filtrar un mapa persistente en Clojure?
- 28. C++: vector a stringstream
- 29. ¿Cómo navegar a través de un vector usando iteradores? (C++)
- 30. Estadísticas R: Cómo grep una palabra exactamente
maldición, 10 sec! +1 – Xeo
Pero es importante tener en cuenta que 'copy_if' solo está en C++ 11, ¿verdad? –
@EitanT: Sin embargo, puede abusar 'remove_copy_if' para C++ 03 invirtiendo el predicado. – Xeo