C++ std::map 在找不到键时添加值



我对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的情况。

最新更新