2010-04-22 39 views
6

Tôi tự hỏi liệu có ai trong số các bạn biết về loại bản đồ kết hợp C++ mà tôi có thể thực hiện nhiều lần tra cứu chính không. Bản đồ cần phải có tra cứu thời gian liên tục nhưng tôi không quan tâm nếu nó được đặt hàng hoặc không có thứ tự. Nó chỉ cần được nhanh chóng.Nhiều bản đồ chính trong c + +

Ví dụ, tôi muốn lưu trữ một loạt các std :: các đối tượng vector trong một bản đồ với một số nguyên và một khoảng trống * như các phím tra cứu. Cả int và void * phải khớp với vectơ của tôi để lấy ra. Có bất cứ điều gì như thế này đã tồn tại chưa? Hay tôi sẽ phải tự cuộn mình. Nếu có, đề nghị nào? Tôi đã cố gắng để lưu trữ một tăng :: unordered_map bên trong một tăng :: unordered_map, nhưng tôi đã không có bất kỳ thành công với phương pháp này được nêu ra. Có lẽ tôi sẽ tiếp tục Pershing phương pháp này nếu không có cách nào đơn giản hơn. Cảm ơn!

Trả lời

4

Tra cứu liên tục yêu cầu bản đồ băm. Bạn có thể sử dụng một số boost::unordered_map (hoặc tr1). Khóa sẽ là combined hash của con trỏ int và void.

+0

Đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn! – Morgan

0

Bạn có thể sử dụng boost::multi_index.

(mặc dù tôi nghĩ điều bạn thực sự muốn là sử dụng loại chứa cả void * và số nguyên làm khóa cho bản đồ của bạn và chỉ để so sánh dữ liệu thô cho cả hai để cung cấp toán tử so sánh bản đồ)

2

Nếu bạn không muốn sử dụng tăng, bạn có thể thử map< int, map<void*, vector> >. Các tra cứu được tuy nhiên O (log (kích thước bản đồ)).

Các vấn đề liên quan