如何在const方法中迭代映射

时间:2015-02-09 20:12:03

标签: c++

目前我有类似的东西

int Myclass::MyMethod(const std::string &name) const
{
   for (std::map<std::string,int>::iterator it=mIndex.begin(); it!=mIndex.end(); ++it)<--Error
   {
   }

}

现在我收到了错误

`Error  1   error C2440: 'initializing' : cannot convert from`'std::_Tree<_Traits>::const_iterator' to 'std::_Tree<_Traits>::iterator'` 

关于如何以常量方法迭代地图的任何建议?

3 个答案:

答案 0 :(得分:6)

您需要使用const_iterator

for (std::map<std::string,int>::const_iterator it=mIndex.begin(); it!=mIndex.end(); ++it)

可以通过让auto推断出类型来减少输入来实现:

for (auto it = mIndex.begin(); it!=mIndex.end(); ++it) { ...

或者使用基于for循环的范围:

for (const auto& p : mIndex) { .... }

答案 1 :(得分:2)

int Myclass::MyMethod(const std::string &name) const
{
   for (std::map<std::string,int>::const_iterator it=mIndex.begin(); it!=mIndex.end(); ++it)
   {
   }

}

int Myclass::MyMethod(const std::string &name) const
{
   for (auto it=mIndex.cbegin(); it!=mIndex.cend(); ++it)
   {
   }

}

int Myclass::MyMethod(const std::string &name) const
{
   for (auto& elem :mIndex.)
   {
   }

}

答案 2 :(得分:2)

迭代器似乎需要const,您必须使用const_iterator而不是iterator。 C ++ 11之后的另一种方法是使用auto关键字。

for (auto it=mIndex.begin(); it!=mIndex.end(); ++it)