c++ - 在 C++ 中访问映射的内存有效方法

标签 c++

我最近了解到,访问 map 中不存在的键会将该键插入具有默认值的 map 中。

map <int, int> m;

m.find(1) == m.end() // true
cout << m[1];
m.find(1) == m.end() // false

在键不存在的情况下访问映射中的值而不分配额外内存的最佳方法是什么?有没有比下面这样更干净/更好的替代方案?

map <int, int> m;

auto it = m.find(3);

if (it == m.end()) {
   return;
}

const auto& val = it->second;

最佳答案

C++17 中的语法可能略有改进:您可以在 if 语句的条件内初始化迭代器:

map <int, int> m;

if (auto it = m.find(3); it != m.end())
{
    int val = it->second;
    cout << "Found that value: " << it->first << " -> " << val << '\n';
}

这种方式可能更好,因为它将 itval 的范围限制为 if 语句。但也许这种风格太严格了——如果你的代码很复杂,你最终可能会得到许多嵌套的 if 语句。

关于c++ - 在 C++ 中访问映射的内存有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76621992/

相关文章:

c++ - 删除绑定(bind)到成员函数的 vector<std::function<...>> 的任何元素

c++ - 如何在 Qt 中将 base64 字符串保存为 png 图像?

c++ - 不使用默认算法对字符串的标准 vector 进行排序

c++ - C++获取一个字符串的所有后缀

c++ -::socket 返回 0 并且::connect 将 errno 设置为 EBADF

c++ - FFTW 性能变化

c++ - 迭代器 - 在 C++11 中没有匹配的删除函数

c++ - HID设备(USB)详解

c++ - 模板参数名称与 MSVC C++ 中的方法发生冲突

c++ - 为什么在用花括号初始化结构时会出错?