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

C++ std::map adds values when key not found

我不太擅长 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] 语句不是 read 语句吗?这很难调试,因为我在我的代码中找不到将空值写入地图的位置。那么你能解释一下我在这里做错了什么吗?

My question is why did this happen?

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

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

无论如何,即使 [] 没有创建新元素(或者如果您使用 find),您的代码也会失败,因为您根本不处理 [=在 varSeg.

中找不到 15=]