c++ - 如果在 map 中找不到键,则返回其他值

标签 c++ unordered-map

我有无序 map :

static unordered_map<int, long> my_map;
auto& result = my_map[i];

如果没有键i,结果将是0。 是否可以返回其他值,例如 NULL-MAXINT

最佳答案

你可以这样做(不在 map 中插入值):

template <typename Key, typename Value>
Value& get_or(std::unordered_map<Key, Value>& m, const Key& key, Value& default_value)
{
    auto it = m.find(key);
    if (it == m.end()) {
        return default_value;
    }
    return it->second;
}

或者如果你想在 map 中添加不存在的值:

template <typename Key, typename Value, typename T>
Value& get_or(std::unordered_map<Key, Value>& m, const Key& key, T&& default_value)
{
    return m.emplace(key, std::forward<T>(default_value)).first->second;
}

并使用它

int default_value = 42;
auto& result = get_or(my_map, i, default_value);

关于c++ - 如果在 map 中找不到键,则返回其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40159732/

相关文章:

c++ - 为什么这个C++程序会导致内存泄漏?

c++ - 如何安全终止QT中不同线程上运行的对象

c++11 - C++ unordered_map 异常安全

c++ - 检查 unordered_maps 的 unordered_map 是否包含键的最简单方法

c# - C++ 回调到 C# 函数期间出现 NullReferenceException

c++ - ZeroMQ 推/拉

c++ - new [size_t] + 1 返回什么

C++如何将方法作为模板参数传递

c++ - 对 unordered_map 的奇怪行为感到震惊

c++ - 第一个唯一编号慢运行时问题