Ho un vector<MyType>
e vorrei un altro vector<MyType>
contenente solo quei MyTypes che soddisfano alcuni criteri semplici, ad es. che alcuni membri di dati equivalgono a qualcosa. Qual è il modo migliore per risolvere questo?Come filtrare o "grep" un vettore C++?
8
A
risposta
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
Usando un po 'di spinta, è possibile:
std::vector<int> v = {1,2,-9,3};
for (auto i : v | filtered(_arg1 >=0))
std::cout << i << "\n";
Questo esempio utilizza Phoenix per lambda impliciti definiti dal modello di espressione (_arg1 >= 0
), ma è possibile utilizzare qualsiasi chiamabile (C++ 03 o superiore) con adattatori Boost (adattato, trasformato, invertito ecc.)
Vedere qui per altro materiale vetrina e un ful l esempio:
+0
Un altro buon modo, ed è possibile estendere Boost.Range per creare un nuovo vettore dal risultato filtrato, se necessario, senza salvare il risultato in modo temporaneo. – Xeo
Problemi correlati
- 1. C++ Per filtrare un vettore di classe usando l'algoritmo
- 2. C++ letterali vettore, o qualcosa come loro
- 3. Estrai usando sed o grep
- 4. Come posso filtrare un Datatable?
- 5. Come si inverte un vettore C++?
- 6. Come stampare elementi in un vettore C++
- 7. restituisce un vettore vuoto C++
- 8. Riutilizzare un vettore in C++
- 9. Come filtrare un vettore di stringhe in R sulla base di stringa corrispondenti
- 10. inizializzazione di un vettore di vettore <doubles> C++
- 11. Come rendere un C# 'grep' più funzionale usando LINQ?
- 12. Uso di grep per filtrare le parole da un file stopword
- 13. Come filtrare un array associativo?
- 14. Come filtrare dinamicamente usando C# xelement?
- 15. Come aggiungere un vettore in ordine inverso con un altro vettore in C++?
- 16. Come "grep" un flusso continuo?
- 17. Come filtrare un elenco in C# con espressione lambda?
- 18. come leggere efficientemente un file binario in un vettore C++
- 19. R statistiche: Come grep una parola esattamente
- 20. Come espandere dinamicamente un array in C++? {Come nel vettore}
- 21. C++ remove_if su un vettore di oggetti
- 22. C++ vettore di inizializzazione
- 23. C++ vettore di vettori
- 24. vettore C++ 98 errore
- 25. riserva vettore C++
- 26. C++/Dimensioni di un vettore 2d
- 27. Come randomizzare un vettore
- 28. Trovare un vettore all'interno di un vettore
- 29. ricerca inversa grep con contesto
- 30. Filtrare un elenco da un altro elenco C#
dannazione, 10 sec! +1 – Xeo
Ma è importante notare che 'copy_if' è solo in C++ 11, giusto? –
@EitanT: è possibile abusare 'remove_copy_if' per C++ 03, invertendo il predicato. – Xeo