C++,通过const引用访问std::map元素

11

我有一个与const相关的问题。假设我有:

class A{
    friend std::ostream& operator<<(std::ostream& os,const A& myObj);

   private:
    std::map<int,int> someMap;
    int someInteger;
 };
 std::ostream& operator<<(std::ostream& os,const A& myObj){
  os<<myObj.someInteger<<std::endl;
  os<<myObj.someMap[0]<<std::endl;
  }

这种代码由于与地图的const冲突,在编译时会生成错误(如果我注释掉打印地图值的那行,一切都好),如果我在函数原型中去掉“const”,所有东西都好。我真的不知道问题出在哪里..

请帮忙解决一下吗?


5
我认为你的意思是 myObj.someMap[0] - chris
os<<myObj<<someMap[0] 应该改为 os<<myObj.someMap[0],以充实 Chris 所说的内容。 - WhozCraig
1个回答

33

std::map::operator[]不是const,因为如果元素不存在,则插入一个元素。在c++11中,可以使用std::map::at()代替:

myObj.someMap.at(0)

否则,您可以先使用std::map::find检查元素是否存在。

if (myObj.find(0) != myObj.end())
{
  // element with key 0 exists in map
} else 
{
  // do something else.
}

请注意,std::map :: at()从2003年起已内置于gcc中。 - Andrew Prock
非常感谢。我理解了问题。而且,该运算符与我的g++很好地配合使用! - volatile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接