Tôi đã sau shared_ptr
đến một map
:Initialising std :: shared_ptr <std::map<>> sử dụng chuẩn bị tinh thần-init
std::shared_ptr<std::map<double, std::string>>
và tôi muốn khởi nó sử dụng chuẩn bị tinh thần-init. Có thể không?
Tôi đã thử:
std::string s1("temp");
std::shared_ptr<std::map<double, std::string>> foo = std::make_shared<std::map<double, std::string>>(1000.0, s1);
nhưng điều đó mang lại cho các lỗi sau khi biên soạn sử dụng Xcode 6.3:
/usr/include/c++/v1/map:853:14: Candidate constructor not viable: no known conversion from 'double' to 'const key_compare' (aka 'const std::__1::less<double>') for 1st argument
Tôi đã thử các biến thể khác của tham số đầu tiên (1000.0) nhưng không thành công .
Có ai giúp được không?
có thể, nhưng không đẹp, 'std :: shared_ptr> foo = std :: mak e_shared > (std :: initializer_list :: value_type> {{1000.0, s1}}); ' –
hoặc chỉ 'std :: shared_ptr> foo = std :: make_shared > (std :: map {{1000.0, s1}}); 'nhưng vẫn không đẹp –
Điều đó có hiệu quả. Tôi lưu ý việc sử dụng 'value_type'. Tôi chỉ thấy cặp 'typedef 'của nó'. Tại sao tôi cần điều đó? –
ksl