【发布时间】:2015-12-21 23:24:26
【问题描述】:
This answer 到 this popular question 给出了带有映射的 range-for 循环的惯用用法:
for (auto& kv : myMap) {
// do stuff, where kv.first is the key and kv.second is the value
}
问题是,通常情况下,我们希望为键和值指定有意义的名称(而不是为它们对命名)。这意味着写作,例如:
for (auto& kv : myMap) {
auto planet_name = kv.first;
auto distance_from_sun = kv.second;
// do stuff with planet_name and distance_from_sun
}
而且,好吧,你知道 - 我不想写完整的三行,特别是因为我不关心 kv(通常)。我希望像
for (auto& {planet_name, distance_from_sun} : myMap) {
// do stuff with planet_name and planet_distance_from_sun
}
或
for (tie{auto& planet_name,auto& distance_from_sun} : myMap) {
// do stuff with planet_name and planet_distance_from_sun
}
或其他一些类似的结构可以工作。如果我们可以分配对,并且如果我们可以在将它们放置在地图中时构造对,那么为什么不能在范围 for 循环中定义对呢?
...或者也许 C++11/14/17 确实有某种技巧可以以某种方式实现这种效果?
【问题讨论】:
-
你可能对P0144R0感兴趣。
标签: c++11 for-loop dictionary foreach range