首页 > 解决方案 > 为什么标准 C++ 的映射中没有“指向映射值的返回指针”?

问题描述

除了operator[]和方法,在或必须使用迭代器at()中的键查找,并且必须在使用关联值之前检查迭代器。这很公平。std::mapstd::unordered_map

现在该contains()方法已添加到这些容器中,但仅返回一个bool.

我真的很想看到一个方法,通过成功的查找value_ptr(key)返回指向迭代器值的指针或.secondnullptr

或者,也许更有用(使用单子操作),std::optional<value_type&> opt_value(key)当找不到密钥时,它不包含任何内容。(自然而然,所有这些都带有 constness 的重载。)

这可能会导致对查找条件进行更自然的编码:

if (auto value = my_map.value_ptr(key)) {
  do_something_with(*value);
}

我认为这比:

if (auto it = my_map.find(key); it != my_map.end()) {
  do_something_with(it->second);
}

并且比:

if (my_map.contains(key)) {
  do_something_with(my_map.at(key)); // does lookup twice
}

(作为参考,这个问题有一个提供函数模板来做这类事情的答案。)

有什么想法吗?

标签: c++stdmapc++23

解决方案


推荐阅读