代码之家  ›  专栏  ›  技术社区  ›  Ahmed Atteya

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

  •  -1
  • Ahmed Atteya  · 技术社区  · 7 年前

    我现在有两张地图

    map<int, Segment*> varSeg;
    map<Segment*, bool> rules;
    

    因此,varSeg充满了var的赋值->分段*对象,并基于一些逻辑,我试图使用以下循环填充规则映射。

    for(...looping on some vars){
        int segVar = getVar();
        rules[varSeg[segVar]] = (segVar > 0);
    }
    

    segVar 尚未包含在 varSeg 我遇到了一个奇怪的行为。在内部创建了一个新条目 带键的地图 值为 Null 对于段。当然,这在后来的代码中引起了各种各样的问题。

    varSeg[segVar] 这里的声明是阅读声明吗?这很难调试,因为我在代码中找不到位置,因为我正在将空值写入映射。你能解释一下我做错了什么吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Konrad Rudolph    7 年前

    我的问题是为什么会这样?

    std::map::operator[] 正如文件中明确指出的那样。

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

    无论如何,您的代码将失败,即使 [] 没有创建新元素(或者如果使用 )因为你根本不处理这种情况 segVar 在中找不到 varSeg .