Tôi có một số vector<MyType>
và muốn một số khác vector<MyType>
chỉ chứa những MyTypes đáp ứng một số tiêu chí đơn giản, ví dụ: rằng một số thành viên dữ liệu bằng một cái gì đó. Cách tốt nhất để giải quyết vấn đề này là gì?Làm cách nào để lọc hoặc "grep" một vector C++?
8
A
Trả lời
17
Sử dụng 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
Sử dụng một chút Boost, bạn có thể:
std::vector<int> v = {1,2,-9,3};
for (auto i : v | filtered(_arg1 >=0))
std::cout << i << "\n";
Mẫu này sử dụng Phoenix cho lambdas ngầm được xác định bởi mẫu biểu thức (_arg1 >= 0
), nhưng bạn có thể sử dụng bất kỳ cuộc gọi nào (C++ 03 hoặc cao hơn) với bộ điều hợp Tăng cường (được lắp ghép, chuyển đổi, đảo ngược, v.v.)
Xem ở đây để xem thêm tài liệu giới thiệu và một ful l Ví dụ:
+0
Một cách hay khác, và bạn có thể mở rộng Boost.Range để tạo một vectơ mới từ kết quả được lọc, nếu bạn cần, mà không lưu kết quả tạm thời. – Xeo
Các vấn đề liên quan
- 1. C++ cách nhanh nhất để xóa hoặc xóa một vector
- 2. Làm thế nào để làm cho std :: vector từ vector khác với bộ lọc cụ thể?
- 3. Làm cách nào để viết chương trình lọc trong C?
- 4. Lọc khung dữ liệu trên một vector
- 5. C++ Để lọc một lớp vector bằng cách sử dụng thuật toán
- 6. Matlab, cách lọc một vector số theo điều kiện?
- 7. Làm thế nào để đảo ngược một vector C++?
- 8. R - Lọc một vector sử dụng một hàm
- 9. Làm cách nào để khởi tạo một std :: vector trong một hàm tạo lớp trong C++?
- 10. Grep vs Bộ lọc trong jQuery?
- 11. Làm thế nào để làm cho một C# 'grep' hơn Chức năng sử dụng LINQ?
- 12. làm thế nào để cắt mảng vector char hoặc chuỗi?
- 13. Làm thế nào để lọc một mảng trong Java?
- 14. Phụ thêm một vector để một vector
- 15. Làm cách nào để triển khai Unix grep trong Perl?
- 16. Làm cách nào để grep cho biểu tượng lớn hơn?
- 17. Làm thế nào để lọc một vector của Strings trong R dựa trên chuỗi phù hợp với
- 18. Làm cách nào để viết bí danh cho grep -R?
- 19. Làm cách nào để lọc một mảng đối tượng?
- 20. Làm thế nào để tiêu diệt đúng C++ vector của vector và giải phóng bộ nhớ
- 21. Làm thế nào để lọc datagridview bằng cách sử dụng một hộp văn bản trong C#?
- 22. Làm thế nào để thay đổi một yếu tố cụ thể của một vector STL C++
- 23. Tìm cách tìm một vector C++ STL bên trong một vector STL
- 24. Làm thế nào để truyền vector 2-D vào một hàm trong C++?
- 25. làm thế nào để tạo ra một vector của các con trỏ tới một vector
- 26. GLM: Làm thế nào để chuyển đổi một vector?
- 27. Làm thế nào để đọc một tập tin vào vector trong C + +?
- 28. Làm thế nào để thực hiện một bộ lọc nhỏ hơn hoặc bằng bộ lọc truy vấn Django?
- 29. R thống kê: Cách grep một từ chính xác
- 30. Làm thế nào để grep Git cam kết khác biệt hoặc nội dung cho một từ nào đó?
Chết tiệt, 10 giây! +1 – Xeo
Nhưng điều quan trọng cần lưu ý là 'copy_if' chỉ có trong C++ 11, phải không? –
@EitanT: Bạn có thể lạm dụng 'remove_copy_if' cho C++ 03, bằng cách đảo ngược biến vị ngữ. – Xeo