"不匹配operator ="试图在C++中迭代map

Arv*_*vin 4 c++ iterator compiler-errors const map

我正在尝试迭代定义如下的地图:

std::map< size_type, std::pair<size_t, unsigned int> > ridx_;
Run Code Online (Sandbox Code Playgroud)

现在我试图在以下友元函数中迭代ridx_(这是类的私有成员),该函数重载operator <<

std::ostream& operator<<(std::ostream &os, const SMatrix &m) 
{
  std::map< size_type, std::pair<size_t, unsigned int> >::iterator it;

  //The following is line 34
  for (it = m.ridx_.begin(); it !=  m.ridx_.end(); it++)
    os << it->first << endl;

  return os;
}
Run Code Online (Sandbox Code Playgroud)

但是g ++出错了:

SMatrix.cpp:34:错误:'it = m-> SMatrix :: ridx_.std :: map <_Key,_Tp,_Compare,_Alloc> ::以_Key = unsigned int,_Tp开头的'operator ='不匹配= std :: pair,_Compare = std :: less,_Alloc = std :: allocator >>'/usr/include/c++/4.3/bits/stl_tree.h:152:注意:候选人是:std :: _ Rb_tree_iterator >> &std :: _ Rb_tree_iterator >> :: operator =(const std :: _ Rb_tree_iterator >> &&)make:* [myTest]错误1

我究竟做错了什么?

bdo*_*lan 12

因为m(因此m.ridx_)是const,你必须使用std::map< size_type, std::pair<size_t, unsigned int> >::const_iterator,而不是::iterator这里.

如果您使用的是C++ 0x编译器,则可能还需要考虑使用auto:

for (auto it = m.ridx_.begin(); it != m.ridx_.end(); it++)
Run Code Online (Sandbox Code Playgroud)