【问题标题】:Why use `std::map::find` for checking if maps have a key?为什么使用 `std::map::find` 来检查地图是否有键?
【发布时间】:2020-06-16 03:50:50
【问题描述】:

我最近发现(不是通过研究,所以如果这是错误的,请告诉我,我会更正)以下方法有效:

std::map<T*, U*> map;
std::cout << map[key_that_is_not_in_map] << std::endl;
// OUTPUT:
// 0

但是很多人建议使用std::map::find(key_.....) != std::map::end()

是后者更安全,还是前者仅适用于指针键和值?

【问题讨论】:

  • operator[] 需要一个可变映射,因为如果它不存在,它会将键添加到映射中,并且初始化值为零。

标签: c++ algorithm dictionary find stdmap


【解决方案1】:

后者是否有什么使它更安全的东西,或者是 首先只适用于指针键和值?

是的std::map::operator[] 在不存在键的情况下执行插入。而std::map::find 则没有。

来自 cppreference.com std::map::operator[]

返回对映射到等效键的值的引用 键,如果该键不存在则执行插入

【讨论】:

  • 哦,如果第一个是假的,那么是否添加了一个条目?
  • @ChrisGeorge • find 是一个查找,[key] 是一个“更新插入”(如果找到则更新,否则插入)。
猜你喜欢
  • 2016-04-10
  • 1970-01-01
  • 2010-12-23
  • 2023-01-12
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
相关资源
最近更新 更多