简单的方法是显而易见的
std::map<int,std::unique_ptr<something>> mymap;
auto f = mymap.find(5);
std::unique_ptr<something> myptr;
if (f == mymap.end())
mymap.insert({5, std::move(myptr)});
Run Code Online (Sandbox Code Playgroud)
但是,这看起来效率不高,因为我必须在地图中找到两次键.一个用于检查密钥是否不存在,并且插入功能也将执行相同的操作.
如果我只是使用mymap.insert({5, std::move(myptr)});那么我的唯一ptr(myptr)如果pair.second返回false(键已经存在)就消失了.
编辑:
显然答案是在C++ 17上try_emplace,并且它已经在我正在使用的编译器中可用(vs2015),而且由于我正在处理个人项目,我可以负担得起它.
如果您不打算nullptr在地图中存储s,那么您可以这样做:
auto& r = mymap[5];
if ( r == nullptr )
r = std::move(myptr);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3938 次 |
| 最近记录: |