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=]
我不太擅长 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
.