2015-02-09 43 views
-1

目前,我有这样的事情如何循环的地图在一个const方法

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

任何建议我如何能在地图上迭代常量方法?

+1

怎么样使用'const_iterator'? – sjaustirni 2015-02-09 20:14:33

+0

编译器消息告诉你要使用什么类型。你问*为什么*? – 2015-02-09 20:14:34

回答

5

您需要使用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) { .... } 
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

看来迭代器必须const,你必须使用const_iterator代替iterator。 C++ 11之后的另一种方式是使用auto关键字。

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