目前我有类似的东西
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'`
关于如何以常量方法迭代地图的任何建议?
答案 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)