Một cuộc nói chuyện gần đây về unordered_map
C ++ khiến tôi nhận ra rằng tôi nên sử dụng unordered_map
cho hầu hết các trường hợp tôi đã sử dụng map
trước đây, vì hiệu quả của việc tra cứu ( khấu hao O (1) so với O (log n) ). Hầu hết thời gian tôi sử dụng bản đồ, tôi sử dụng int
hoặc std::string
là loại khóa; do đó, tôi không gặp vấn đề gì với định nghĩa của hàm băm. Càng nghĩ về nó, tôi càng nhận ra rằng tôi không thể tìm thấy bất kỳ lý do nào của việc sử dụng std::map
một std::unordered_map
trong các trường hợp khóa với các loại đơn giản - tôi đã xem qua các giao diện và không tìm thấy bất kỳ sự khác biệt đáng kể sẽ ảnh hưởng đến mã của tôi.
Do đó câu hỏi: liệu có bất kỳ lý do thực sự để sử dụng std::map
trên std::unordered_map
trong trường hợp của các loại đơn giản như int
và std::string
?
Tôi đang hỏi từ quan điểm lập trình nghiêm ngặt - Tôi biết rằng nó không được coi là hoàn toàn tiêu chuẩn và nó có thể gây ra vấn đề với việc chuyển.
Ngoài ra, tôi hy vọng rằng một trong những câu trả lời đúng có thể là "hiệu quả hơn đối với các tập dữ liệu nhỏ hơn" vì chi phí nhỏ hơn (có đúng không?) - do đó tôi muốn hạn chế câu hỏi trong trường hợp số lượng các khóa không tầm thường (> 1 024).
Chỉnh sửa: duh, tôi quên mất điều hiển nhiên (cảm ơn GMan!) - vâng, bản đồ được đặt hàng tất nhiên - tôi biết điều đó, và đang tìm kiếm những lý do khác.