【问题标题】:iterate through unordered_map using boost_foreach使用 boost_foreach 遍历 unordered_map
【发布时间】:2014-01-18 15:57:10
【问题描述】:

在我的课堂上我有这样的soundmap

class SoundSubSystem
{
private:
    boost::unordered_map<string, ISoundEngine*> soundmap;
....
};

但是如何使用BOOST_FOREACH 遍历它呢?

SoundSubSystem::~SoundSubSystem()
{
    BOOST_FOREACH(/*?*/ item, soundmap) {
        item.second->drop();
    }
};

item 应该有什么值类型?

【问题讨论】:

  • 作为建议,考虑将编译器升级到提供 C++11 支持的版本,并使用基于范围的 for 循环:for (auto&amp; item : soundmap) { item.second-&gt;drop(); }
  • 我正在使用 Visual Studio 2010 - 据我所知它不支持 c++11
  • 确实它不支持 C++11 的基于范围的for 循环,但它确实支持auto。所以你可以这样做:BOOST_FOREACH(auto&amp; item, soundmap) { item.second-&gt;drop(); }.
  • 我明白了。是的!它有效!

标签: c++ boost


【解决方案1】:

试试这个:-

typedef boost::unordered_map<string, ISoundEngine*> myhash;

BOOST_FOREACH(myhash::value_type& item, soundmap) {
        item.second->drop();
    }

【讨论】:

  • @user1432980 你能用typename关键字试试吗。我想知道BOOST_FOREACH 宏是否可能需要这种类型。或者可以按照评论之一的建议使用auto
  • 恐怕这里的问题在于将stringISoundEngine* 分开的逗号。记住BOOST_FOREACH 是一个宏,所以, ISoundEngine* ... 部分可能会被解释为第二个参数——我想。而是使用BOOST_FOREACH(auto&amp; item, soundmap),或者,如果您真的想采用C++03 方式,请在宏外部为boost::unordered_map&lt;string, ISoundEngine*&gt;boost::unordered_map&lt;string, ISoundEngine*&gt;::value_type 定义typedef
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2021-07-18
  • 2014-10-01
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多