c++ - 为什么标准 C++ 的映射中没有“指向映射值的返回指针”?
问题描述
除了operator[]
和方法,在或必须使用迭代器at()
中的键查找,并且必须在使用关联值之前检查迭代器。这很公平。std::map
std::unordered_map
现在该contains()
方法已添加到这些容器中,但仅返回一个bool
.
我真的很想看到一个方法,通过成功的查找value_ptr(key)
返回指向迭代器值的指针或.second
nullptr
或者,也许更有用(使用单子操作),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
}
(作为参考,这个问题有一个提供函数模板来做这类事情的答案。)
有什么想法吗?
解决方案
推荐阅读
- ruby-on-rails - 如何使用 Active Storage 从 URL 存储图像
- c - 编译旧的 C 代码 + X86 分解它
- sql - 如何将数据插入具有引用和范围的表中
- c# - Xamarin iOS 等效于 ApplicationData.Current.LocalFolder
- scala - 当我尝试在项目中添加节点模块时,sbt 无法运行
- sql - SQL Server - 将 SELECT 语句存储到存储过程中的变量中
- mysql - MySQL - 尝试将 `GROUP_CONCAT` 与 `COUNT()` 结合使用
- inno-setup - Inno Setup:未知标识符“IsWin64”
- node.js - VSCode 扩展中的“require”:找不到模块“./tool.js”
- php - PHP中AND门的基本感知器,我做对了吗?奇怪的结果