我对C++中的集合不是很好,所以如果我的问题有点愚蠢,请放轻松。
我目前有 2 张地图
map<int, Segment*> varSeg;
map<Segment*, bool> rules;
因此,varSeg 填充了 var -> Segment* 对象的赋值,并且基于某些逻辑,我尝试使用以下循环来填充规则映射。
for(...looping on some vars){
int segVar = getVar();
rules[varSeg[segVar]] = (segVar > 0);
}
但是,如果某个segVar
尚未包含在varSeg
中,我会遇到一种奇怪的行为。在地图内创建了一个新条目varSeg
其中包含键segVar
和线段的值Null
。这当然导致了以后我的代码中的各种问题。
我的问题是为什么会这样?这里的varSeg[segVar]
语句不是读语句吗?这很难调试,因为我在我的代码中找不到我正在将 null 值写入地图的位置。那么你能解释一下我在这里做错了什么吗?
我的问题是为什么会发生这种情况?
因为这是std::map::operator[]
应该做的,正如文档中明确指出的那样。
如果您不希望这种(最有用(行为,请使用find
成员函数而不是[]
。
无论如何,即使[]
没有创建新元素(或者如果您使用了find
(,您的代码也会失败,因为您根本不处理在varSeg
中找不到segVar
的情况。