为什么operator []不允许使用map但允许使用int数组?

时间:2011-09-02 11:41:15

标签: c++ map operator-keyword

我有一个包含以下私人成员的课程:

 private:
  int *vals_;
  size_type *cidx_;
  std::map< size_type, std::pair<size_t, unsigned int> > ridx_;

现在我试图在operator&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;过载:(注意 m是const

std::ostream& operator<<(std::ostream &os, const SMatrix &m) 
{
    os << m.cidx_[0] << endl;
    os << m.ridx_[0].first << endl;

  return os;
}

我发现m.cidx_ [0]会起作用,但m.ridx_ [0] .first会出错:

  

错误:传递'const std :: map,std :: less,std :: allocator&gt; &GT; &GT;”作为'_Tp&amp;的''这个'论点std :: map&lt; _Key,_Tp,_Compare,_Alloc&gt; :: operator [](const _Key&amp;)[with _Key = unsigned int,_Tp = std :: pair,_Compare = std :: less,_Alloc = std :: allocator &GT; &gt;]'丢弃限定符

我认为这意味着operator []是一个修改操作符,因此与m是const的事实相矛盾。但是为什么它适用于vals_和cidx_,它们是int和size_type数组?

2 个答案:

答案 0 :(得分:7)

如果元素不存在,

std::map::operator[]会插入一个元素,因此它不能与const个对象一起使用。数组不是C ++中的类类型,因为它们a[idx]等同于*(a + idx),并且永远不会改变数组本身。

答案 1 :(得分:1)

如果查看map容器的源代码,没有带有const cv限定符的map :: operator [],但你的矩阵对象是const