Tôi có một std :: unordered_mapLàm thế nào để chọn loại trình vòng lặp sử dụng biến tự động?
std::unordered_map<std::string, std::string> myMap;
Tôi muốn có được một iterator const sử dụng find. Trong C++ 03 tôi sẽ làm
std::unordered_map<std::string, std::string>::const_iterator = myMap.find("SomeValue");
trong C++ 11 Tôi muốn sử dụng tự động thay vì cắt giảm các mẫu
auto = myMap.find("SomeValue");
Đây sẽ là một const_iterator hoặc lặp? Làm thế nào để trình biên dịch quyết định sử dụng? Có cách nào tôi có thể buộc nó để chọn const?
Có lẽ trình biên dịch được thực hiện chức năng toàn suy luận kiểu ... Nhưng tại sao các constness của các vấn đề lặp đối với bạn? –
Trừ khi sự hiểu biết của tôi về quá tải là sai (hoặc http://en.cppreference.com/w/cpp/container/unordered_map/find là sai), 'nonConstMap.find' luôn trả về một' iterator'. Loại trả lại và những gì bạn làm với kết quả (ví dụ: chuyển nó tới một hàm tạo 'const_iterator') không ảnh hưởng đến việc chọn quá tải nào. Nghĩa là, nó chỉ trả về 'const_iterator' nếu bạn gọi' constMap.find'. – delnan