【发布时间】:2012-01-10 08:45:38
【问题描述】:
我有一个想要放入地图的值类型。 它有一个不错的默认复制构造函数,但没有默认构造函数。
我相信只要不使用operator[],一切都会好起来的。
但是,我最终得到了像这样非常丑陋的结构来实际插入一个对象。 (我认为如果该键已经存在值,则插入会失败)。
// equivalent to m[5]=x but without default construction
std::map<int,X>::iterator it = m.find(5);
if( it != m.end() )
{
m->second = x;
}
else
{
m->insert( std::make_pair(5,x) );
}
我相信它会扫描地图两次,而且看起来也很丑。
有没有更简洁/更有效的方法来做到这一点?
【问题讨论】:
-
@miaout17,是的,现有答案将解决它。然而,解决的问题是 IMO 的另一个问题。
-
@miaout17,实际上这并不能完全解决它。在这种情况下,如果一个新值已经存在,您就不会将新值存储到地图中。但不要用新值覆盖它。需要稍微调整功能才能做到这一点......有人发布了一个正确执行此操作的解决方案,然后删除了他们的答案:(
标签: c++