我对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]
语句不是一个读语句吗?这是非常难以调试的,因为我在代码中找不到一个地方我正在向地图写入空值。你能解释一下我在这里做错了吗?
答案 0 :(得分:4)
我的问题是为什么会发生这种情况?
因为这是std::map::operator[]
应该做的事情,正如文档中明确指出的那样。
如果您不想要这种(主要是有用的)行为,请使用find
成员函数而不是[]
。
无论如何,即使[]
未创建新元素(或者您使用find
),您的代码也会失败,因为您只是不处理{{1}的情况} segVar
中找不到。