如何在const方法中迭代映射
How to iterate over a map in a const method
目前我有这样的
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)
相关文章:
- 迭代和比较映射<字符串、矢量<string>> c++ 中的值
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 映射迭代器与运算符不匹配
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 使用迭代器替换映射中的常量项的方法
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- 如何将元素插入和迭代到这种映射.C++
- 映射中循环的迭代器
- 在迭代期间并发修改映射
- 如何迭代映射 inc++ 的向量
- 在包含类对象的C++中迭代映射
- 迭代映射以获取输入时出错
- 如何在const方法中迭代映射
- C++中不同大小向量的迭代映射
- 是否可以按值顺序迭代映射
- 使用boost迭代映射的gzip文件
- 如何迭代映射的c++映射
- 我可以从所需的键迭代映射吗
- 迭代映射并调用删除其他元素的函数就是映射
- 在c++中迭代映射时发出SIGSEGV信号