【问题标题】:Check if map entry is last in a range based for?检查地图条目是否在基于的范围内的最后一个?
【发布时间】:2014-05-30 01:11:50
【问题描述】:

我更愿意以与 answer 相同的方式循环 c++ map:

for (auto& kv : myMap) {
    std::cout << kv.first << " has value " << kv.second << std::endl;
}

使用基于范围的方法,是否可以确定kv 是范围中的最后一个元素?如果有,怎么做?

【问题讨论】:

  • 如果您不修改该值。最好使用auto const&amp;。
  • 你能测试它是否等于 myMap.end() - 1?
  • &amp;kv == &amp;*m.rbegin(); 为什么不使用普通的 for 循环呢? Range for 适用于您想要迭代整个集合的情况。
  • @ooga 道歉,没看到-1

标签: c++ for-loop map range


【解决方案1】:

您可以获取地图中的最后一个键并检查它。

const auto& lastKey = myMap.rbegin()->first;
for (auto& kv : myMap) {
    if(kv.first == lastKey) {
        std::cout << "The last one" << std::endl;
    }
    std::cout << kv.first << " has value " << kv.second << std::endl;
}

如果您需要倒数第二个或类似的东西,您也可以使用std::prev (reference):

const auto& lastKey = std::prev(myMap.end(),2)->first; // gives the 2nd last

【讨论】:

  • 我会将 int lastKey 更改为 const auto&amp; lastKey 以避免在密钥是复杂类的情况下复制密钥并使代码更通用。 +1,如果你这样做:)
  • @Raxvan:感谢您的评论!我更新了我的答案。
  • 多地图怎么样?
猜你喜欢
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多