【问题标题】:See if key exists in c++ map [duplicate]查看c ++映射中是否存在密钥[重复]
【发布时间】:2020-08-27 04:58:19
【问题描述】:

我有一个 c++ 映射,其中值类型是 bool。我需要查看映射中是否存在密钥,如果不存在,则返回false。这是我现在的代码:

try {
  return board.at[{x, y}];
}
catch (const std::out_of_range& oor) {
  return false;
}

我不想使用[] 运算符,因为如果它不存在,它将初始化该值。有没有办法在没有try块的情况下查看该值是否存在于map中?

【问题讨论】:

  • board.find({x,y}) != board.end()
  • 或者board.count({x,y}) > 0(或者如果你有C++20 board.contains({x,y})
  • 你可以使用find,如果你需要它返回的迭代器,否则使用count

标签: c++


【解决方案1】:

您可以使用std::map::find,如果找到,它将返回一个迭代器,如果没有找到,则返回.end

return board.find({x, y}) != board.end();

【讨论】:

    【解决方案2】:

    return my_map.count({x, y}) 是惯用方式,具有隐式bool 转换的优点。

    C++20 增加了bool contains( const Key& key ) const

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 2013-04-07
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2011-08-20
      • 2012-10-16
      • 2012-11-24
      • 1970-01-01
      相关资源
      最近更新 更多