c++ - 在 map/unordered_map 中使用 find 与 at

标签 c++ exception-handling containers

下面显示了两种查找 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/

相关文章:

python - 如何使用 Python 的 unittest 测试已引发警告?

containers - 如何让 GCE 实例在其部署的容器完成时停止?

docker - 如何在 docker 容器内运行 cron 作业?

c++ - 从单例类中删除对象

c++ - C 程序可以处理 C++ 异常吗?

android - SQLiteConstraintException 不要进入 catch

docker - 启动X个相同Docker容器的最佳方法

c++ - 如何在Mandelbrot集中放大光标点?

c++ - 数组删除给出 EXC_BAD_ACCESS 错误

c++ - 无法打开源文件 d3dx9.h