Я не был уверен, что искать. Я нашел переименование первого и второго итератора карт, но это не совсем то, что я хочу сделать.
Вот что я хотел бы сделать [см. ниже для бессмысленного кода на С++]. Что-то близко к этому возможно? В противном случае просто нужно пойти с возможностью "адаптировать" итератор как первую строку внутри цикла, я полагаю.
// what I want to do:
std::map<int, std::string> my_map;
// ... populate my_map
for(auto key, auto & value: my_map){
// do something with integer key and string value
}
С++ 11 хорош, но скорее избегайте повышения, если это возможно.
Ближайший я получил
// TODO, can this be templated?
struct KeyVal{
int & id;
std::string & info;
template <typename P>
KeyVal(P & p)
: id(p.first)
, info(p.second)
{
}
};
//...
for ( KeyVal kv : my_map ){
std::cout << kv.info;
}
Но это означает запись класса адаптера для каждого отображения: (
// slightly joke answer/"what could possibly go wrong?"
#define key first
#define value second