我最近了解到,访问 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';
}
这种方式可能更好,因为它将 it
和 val
的范围限制为 if 语句。但也许这种风格太严格了——如果你的代码很复杂,你最终可能会得到许多嵌套的 if 语句。
关于c++ - 在 C++ 中访问映射的内存有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76621992/