c++ - STL map 迭代器复制问题

标签 c++ stl dictionary iterator

我有一个 STL 映射,我想遍历它,但似乎无法使代码工作。代码是:

//PowerupInfo is a struct defined in this class's header file
std::map<std::string, PowerupInfo> powerups;

...populate powerups

std::map<std::string, PowerupInfo>::iterator iter;
for (iter = powerups.begin(); iter != powerups.end(); iter++) {
    return iter->second.type ;
}

我得到的错误信息是:

error: no match for 'operator=' in 'iter = (((const std::map<std::string, PowerupInfo, std::less<std::string>, std::allocator<std::pair<const std::string, PowerupInfo> > >)((const PowerupList)this)) + 24u)->std::map<_Key, _Tp, _Compare, _Alloc>::begin with _Key = std::string, _Tp = PowerupInfo, _Compare = std::less<std::string>, _Alloc = std::allocator<std::pair<const std::string, PowerupInfo> >'| note: candidates are: std::_Rb_tree_iterator<std::pair<const std::string, PowerupInfo> >& std::_Rb_tree_iterator<std::pair<const std::string, PowerupInfo> >::operator=(const std::_Rb_tree_iterator<std::pair<const std::string, PowerupInfo> >&)|

所以我通常认为问题与将 iter 设置为它不喜欢的值有关,因为它没有找到“operator=”的匹配项。但为什么?为什么该作业不起作用?

编辑:

结果是方法 WAS const,导致对 powerups 的引用也是 const,从而导致错误。我只是在阅读自己的代码时做得很糟糕。谢谢大家!

最佳答案

您的 map 名称是 poweruplist 而不是 powerups (您在 for 循环中使用了这个名称)。如果这不是错误的原因,那么看起来你是 for 循环在一个通过 const 引用接受映射的函数中(或者是一个类的 const 成员函数)。在这种情况下,您的迭代器类型应该是 const_iterator 而不是 iterator

关于c++ - STL map 迭代器复制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4030237/

相关文章:

c++ - 将基类构造函数转换为派生类构造函数是什么意思?

c++ - ShellExecute 崩溃

c++ - 为什么存储在 STL 容器中的类禁止重载 operator&()?

c++ - Doxygen STL 支持使用点图

python - 使用字典在模型中创建对象时出现 Django TypeError

c++ - vs 2010 : sqlstatementhandle and connection error 中的 mysql 和 c++

C++ 在不暂停控制台的情况下延迟 For-Loop

c++ - C++:在子类中扩展静态STL容器/映射成员?

python - 将两个列表映射到一个倒排字典中

python - python 3.7中的无序字典