gpt4 book ai didi

c++ - 为什么 std::map 没有 FindOrNull 方法

转载 作者:行者123 更新时间:2023-12-03 07:16:10 27 4
gpt4 key购买 nike

FindOrNull 比内置的 find 简洁得多。比较

    auto& map = GetMap()
if (auto iter = map.find("key"); iter != map.end()) {
// use iter.second
}


    if (auto value = GetMap().find_or_null("key")) {
// use *value
}

最佳答案

您的提案没有准确区分“未找到”和“找到 null/false/0 的值”。目前,c++ 通过与 container.end() 进行比较来获得这种区别,您将需要以某种方式获取该信息。

以数据库为例,我们需要“null”与任何实际值完全不同。在这里,您似乎将其等同于 false、nullptr 或 0。所有这些都是必须实现此接口(interface)的某个容器中的有效值。

从 python 的一些例子来看,“未找到”选项是一个异常(exception)。这在 python 中很容易处理,因为该语言牺牲了性能以使异常相对容易处理。但是在 c++ 中处理异常的性能要差得多,从语法清晰度的角度来看也明显更差。

您的提议更接近于提供默认值(例如 false、0、nullptr)的 getter。您会丢失有关是否在容器中找到它的信息,但这并不总是需要的。这是你可以在你的类中实现的东西,但是你想要求它为标准库中的所有容器实现吗?这就是这里的问题。

关于c++ - 为什么 std::map 没有 FindOrNull 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60118288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com