下面显示了两种查找 unordered_map
元素的方法,如果所需键的元素不存在则引发一些错误条件。他们基本上做同样的事情。有理由偏爱其中一个,还是仅仅是风格问题?
void foo()
{
unordered_map<string, int> lookup;
// Method 1. Lookup using find.
const auto i = lookup.find("myKey");
if (i == lookup.end()) {
// Some error condition...
}
else {
// Do something with i...
}
// Method 2. Lookup using try / catch.
try {
const auto& ele = lookup.at("myKey");
// Do something with ele...
}
catch (out_of_range& e) {
// Some error condition...
}
}
最佳答案
就我个人而言,我绝不会为类似的事情使用异常。异常(exception)是为了真正的异常(exception)。它们的强大之处在于允许您在编写代码时无需经常进行本地错误检查。但是在容器中找不到元素(通常)不是错误,它只是两种可能性之一。
通常我会说如果找不到元素就使用异常意味着你必须中止整个函数/操作/子系统。不要使用它来检查单个语句结果。
关于c++ - 在 map/unordered_map 中使用 find 与 at,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38734808/