Vì vậy, tôi có 2 std::map
s <string, shared_ptr<file> >
một là 'cũ' là 'mới' Tôi muốn lấy tệp nào đã được loại bỏ và do đó có khả năng lặp lại differene thrue và làm một số công cụ để shared_ptr. Là điều đó có thể và làm thế nào để làm điều đó?Cách trừ một danh sách các phím bản đồ từ một bản đồ khác và lấy bản đồ mới (bản đồ A - mab B = bản đồ C)
Trả lời
Mặc dù thật dễ dàng để tự viết nội dung này (lặp lại trên A
và kiểm tra xem khóa có xuất hiện trong B
) không, đây có phải là công việc cho std::set_difference
hay không. Chúng tôi sẽ cần một lambda hoặc một số vị tùy chỉnh để so sánh phím, mặc dù:
#include <iterator>
#include <map>
#include <string>
#include <algorithm>
typedef std::map<std::string, MyPtr> my_map;
my_map A; // given
my_map B; // given
void make_a_difference()
{
my_map C; // will hold the result
std::set_difference(A.begin(), A.end(),
B.begin(), B.end(),
std::insert_iterator<my_map>(C, C.end()),
[](const my_map::value_type & a, const my_map::value_type & b)
{ return a.first < b.first; }
);
}
Nếu bạn muốn viết những dòng này cho mình, bạn nên cân nhắc lợi dụng thực tế là cả hai dãy đã được sắp xếp, vì vậy bạn có thể làm tốt hơn là tìm kiếm bằng phẳng cho sự tồn tại bằng cách thúc đẩy hai trình lặp song song.
Nếu bạn không có C++ 11, chỉ cần sử dụng vị này thay vì lambda:
bool my_comp(const my_map::value_type & a, const my_map::value_type & b)
{
return a.first < b.first;
}
Hãy coi chừng rằng không có sự so sánh về kiểu ánh xạ! Vì vậy, nếu bạn có cùng một khóa chuỗi trong cả hai bản đồ, thì sẽ không có mục nào trong kết quả, ngay cả khi hai giá trị được ánh xạ khác nhau. Nếu điều này là không mong muốn, bạn cần một vùng chứa đầu ra khác (ví dụ: std::multimap<my_map::key_type, my_map::mapped_type>
) và một biến vị ngữ khác.
- 1. Bản đồ bản đồ - cách giữ bản đồ bên trong làm bản đồ?
- 2. Bản đồ một mục duy nhất của một bản đồ
- 3. Bản đồ + bản đồ choropleth trong R
- 4. Bản đồ sâu Bản đồ trong Groovy
- 5. Xóa các mục khỏi bản đồ dựa trên nội dung của một bản đồ khác
- 6. Bản đồ chi tiết bản đồ địa điểm mới
- 7. Kiểm tra xem bản đồ trong C++ có chứa tất cả các phím từ một bản đồ khác
- 8. Danh sách bản đồ vào từ điển
- 9. Chuyển đổi một vector của bản đồ tới bản đồ bản đồ trong Clojure
- 10. kết hợp các bản đồ thành một bản đồ các bộ giá trị với clojure
- 11. Làm cách nào để tạo ra bản đồ bản đồ?
- 12. "Lập bản đồ" scanl
- 13. c + + xóa bản đồ()
- 14. bản đồ so với hành vi của bản đồ
- 15. Ba bản đồ bao gồm 2 phím
- 16. Sắp xếp bản đồ trong bản đồ theo giá trị
- 17. Danh sách 3 chiều hoặc Bản đồ
- 18. Bản đồ tổ chức bản đồ tự tổ chức (SOM)
- 19. Bản đồ Jquery Bings Bản đồ Json tải lại
- 20. jVectorNhập bản đồ (thế giới) kích thước bản đồ
- 21. Lấy chuỗi bản đồ tĩnh
- 22. Hiểu chức năng bản đồ
- 23. Scala Bản đồ foreach
- 24. JAXB marshaling Bản đồ Danh sách
- 25. Bản đồ cấu trúc dữ liệu Bản đồ
- 26. ggplot2: Bản đồ nhiệt nhanh Bản đồ, định hình lại?
- 27. Bản đồ giao dịch với Bản đồ đồng bộ
- 28. Phân biệt một thể hiện bản ghi từ bản đồ
- 29. Chuyển đổi Bản đồ Java thành Bản đồ Javascript
- 30. thế giới bản đồ - nửa bản đồ của các nước để màu sắc khác nhau
Hãy xem ''' std :: set_difference'''. –