Tôi đang lập kế hoạch sử dụng hai bản đồ trong C++, loại: std::map<char, Node>
, trong đó Node
là một lớp tùy chỉnh. Giả sử tôi có hai bản đồ, m1
và m2
của loại ở trên, tôi muốn tìm hiểu xem m1
chứa tất cả các phím có trong m2
hay không. Nói cách khác, tôi muốn xác minh rằng giao điểm của tập hợp các khóa của m1
và m2
giống với bộ khóa của m2
.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
tôi có thể lặp qua tất cả các phím trong m2
và làm một find()
hoặc count()
trên m1
, nhưng điều đó có vẻ như một sự lãng phí và có lẽ sẽ chậm. Tôi nói điều này bởi vì các khóa được lưu trữ dưới dạng cây tìm kiếm nhị phân theo thứ tự sắp xếp trong một std::map
và do đó mỗi tìm/số sẽ lấy O (logn) và cho khóa tiếp theo trong m2
, cùng một đường dẫn trong các phím của m1
sẽ phải đi ngang từ đầu.
Tôi mới tham gia STL, vì vậy, hãy tha thứ cho sự thiếu hiểu biết của tôi về những thứ có vẻ dễ dàng thực hiện được. Ngoài ra, một số đoạn mã ví dụ đơn giản hoặc liên kết đến đoạn mã sẽ rất hữu ích để hiểu rõ hơn. Tôi không thể sử dụng các thư viện không chuẩn, bao gồm cả tăng cường.
Cảm ơn trước!
Điều này rất hay - tương tự như thuật toán hợp nhất để sắp xếp danh sách. Cảm ơn! – Paresh
Đây là Θ (m2 + m1) trong khi thuật toán ban đầu là Θ (m2 * log (m1)) (kích thước đặt tên sau bản đồ của chúng). Cho dù điều này là tốt hơn thực sự phụ thuộc vào kích thước của 'm1' liên quan đến của' m2' ... –