Tại sao tôi không được phép đọc một đối tượng từ một unordered_map không đổi?đối tượng đọc từ const unordered_map
const unordered_map<int, int> z;
int val = z[5]; // compile error
Các lỗi dưới kêu vang như sau:
error: no viable overloaded operator[] for type 'const
unordered_map<int, int>'
int val = z[5];
Xét rằng mã tương đương sử dụng một const vector
hoạt động tốt Tôi hơi bối rối vì sao chúng ta có được hành vi này.
Để tiết kiệm hơn một chút, bạn cũng có thể sử dụng 'int val = z.at (5);' - Trong trường hợp đó, bạn sẽ nhận được ngoại lệ 'std :: out_of_range' nếu khóa không phải là trong bản đồ. Tất nhiên, nó không ít tiết nếu bạn bao quanh nó trong một khối try-catch. –
Ah vâng tôi quên hành vi này của bản đồ - tôi thấy khá ngạc nhiên khi tìm kiếm một khóa có thể chèn giá trị mặc định vào bản đồ, nhưng điều đó giải thích trong khi đó không phải là hàm thành viên const. Sẽ chấp nhận nó trong 2 phút :) (và có @Benjamin 'at' là sự lựa chọn tốt nhất cho tôi trong mã dù sao đi nữa, bởi vì không tìm thấy giá trị tại thời điểm này sẽ là một lỗi nghiêm trọng). – Voo
@Voo: Nó có thể gây ngạc nhiên ngay từ cái nhìn đầu tiên, nhưng nó ngay lập tức trở nên rõ ràng rằng không có gì khác thực sự có ý nghĩa. –