Tôi đã viết một thuật toán sáng nay và tôi chạy vào một tình huống tò mò. Tôi có hai số std::map
s. Tôi muốn thực hiện một giao điểm được thiết lập trên các bộ khóa của mỗi (để tìm khóa nào là chung cho cả hai bản đồ). Tại một số thời điểm trong tương lai, tôi nghĩ rằng có khả năng tôi cũng sẽ muốn thực hiện phép trừ đặt ở đây. May mắn thay, STL bao gồm các chức năng cho cả hai hoạt động đó. Vấn đề là, tôi dường như không thể nhận được một số std::set
của các phím trong số std::map
. Có cách nào để làm điều này không? Tôi đang tìm kiếm cái gì đó sẽ đơn giản này, giống như nó là trong Java:làm thế nào tôi có thể nhận được một std :: bộ chìa khóa để một std :: bản đồ
std::set<Foo> keys = myMap.getKeySet();
sự hiểu biết của tôi là tôi không thể sử dụng std::set_intersection()
chức năng trực tiếp trên lặp vào bản đồ vì các bản đồ lộ std::pair
đối tượng thay vì chỉ là chìa khóa. Ngoài ra, tôi không nghĩ rằng bản đồ đảm bảo trật tự. Tôi cũng quan tâm đến việc thực hiện thao tác tương tự này trên một cặp std::multimap
s, nếu điều đó tạo ra bất kỳ sự khác biệt nào.
EDIT: Tôi đã quên đề cập ban đầu do tuổi của trình biên dịch tôi buộc phải sử dụng (MSVC++ 6), hầu hết các thủ thuật mẫu tiện lợi có sẵn trong tăng không thể sử dụng.
Đừng quá nhanh để từ bỏ MSVC++ 6 - xem câu hỏi này http://stackoverflow.com/questions/252492/whats-the-latest-version-of-boost-compatible-with-vc6 –
Bản đồ giữ chìa khóa theo thứ tự –