Foreachだけを使用してstd :: mapのすべての値を反復処理することは可能ですか?
これは私の現在のコードです:
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() ;
}
魔法は Boost.Range's map_values
アダプター :
#include <boost/range/adaptor/map.hpp>
for(auto&& i : foo | boost::adaptors::map_values){
i->bar();
}
そして、正式には「範囲ベースのforループ」と呼ばれ、「foreachループ」ではありません。 :)
std::map<float, MyClass*> foo;
for (const auto& any : foo) {
MyClass *j = any.second;
j->bar();
}
c ++ 11(c ++ 0xとも呼ばれます)では、C#やJavaのようにこれを行うことができます
C++ 1z/17から、構造化バインディングを使用できます。
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<int, std::string> m;
m[1] = "first";
m[2] = "second";
m[3] = "third";
for (const auto & [key, value] : m)
std::cout << value << std::endl;
}