如何在const方法中迭代映射

How to iterate over a map in a const method

本文关键字:迭代 映射 方法 const      更新时间:2023-10-16

目前我有这样的

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'` 

关于如何用常量方法迭代映射,有什么建议吗?

您需要使用const_iterator:

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

这可以通过让CCD_ 2推导类型来实现

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

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

for (const auto& p : mIndex) { .... }
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.)
   {
   }
}

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

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