当找不到密钥时,C ++ std :: map会添加值

时间:2017-07-19 10:27:28

标签: c++ insert null operator-keyword stdmap

我对C ++中的集合不是很了解,所以如果我的问题有点愚蠢的话,那么请放轻松。

我目前正在使用2张地图

map<int, Segment*> varSeg;
map<Segment*, bool> rules;

所以varSeg填充了var - &gt;的赋值。分段*对象并基于某些逻辑我试图使用类似下面的循环来填充规则映射。

for(...looping on some vars){
    int segVar = getVar();
    rules[varSeg[segVar]] = (segVar > 0);
}

但是,如果segVar中尚未包含某个varSeg,我会遇到一种奇怪的行为。在varSeg地图中创建了一个新条目,其中包含密钥segVar和值为Null的细分。哪个问题后来在我的代码中引起了各种各样的问题。

我的问题是为什么会这样?这里的varSeg[segVar]语句不是一个读语句吗?这是非常难以调试的,因为我在代码中找不到一个地方我正在向地图写入空值。你能解释一下我在这里做错了吗?

1 个答案:

答案 0 :(得分:4)

  

我的问题是为什么会发生这种情况?

因为这是std::map::operator[]应该做的事情,正如文档中明确指出的那样。

如果您不想要这种(主要是有用的)行为,请使用find成员函数而不是[]

无论如何,即使[]未创建新元素(或者您使用find),您的代码也会失败,因为您只是不处理{{1}的情况} segVar中找不到。