40

std::map「foreach」だけを使用して、すべての値を反復処理することは可能ですか?

これは私の現在のコードです:

std::map<float, MyClass*> foo ;

for (map<float, MyClass*>::iterator i = foo.begin() ; i != foo.end() ; i ++ ) {
    MyClass *j = i->second ;
    j->bar() ;
}

次のことを行う方法はありますか?

for (MyClass* i : /*magic here?*/) {
    i->bar() ;
}
4

4 に答える 4

30
std::map<float, MyClass*> foo;

for (const auto& any : foo) {
    MyClass *j = any.second;
    j->bar();
}

c++11 (c++0x とも呼ばれます) では、C# や Java のようにこれを行うことができます。

于 2012-10-26T12:48:45.823 に答える
21

魔法はBoost.Range のmap_valuesアダプターにあります:

#include <boost/range/adaptor/map.hpp>

for(auto&& i : foo | boost::adaptors::map_values){
  i->bar();
}

また、正式には「foreach ループ」ではなく「範囲ベースの for ループ」と呼ばれています。:)

于 2012-10-26T12:39:12.137 に答える