如果在映射中没有找到键,则返回其他值
Return other value if key not found in the map
我有unordered 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);
结果0
不表示"该值未找到"。值被发现:[]
操作刚刚添加了它。结果是0
,因为这是long
的默认值,而您的[]
操作默认构造了 long
。你不能改变long
的默认构造方式。
如果您只想查看元素是否已经存在,您应该使用my_map.count(i)
,它返回1
或0
,分别表示"此键存在"answers"此键不存在"。如果该键不存在,则可以使用my_map.insert
添加一个键,其值为您喜欢的任何值。
当您使用my_map[i]
时,如果该值不存在,则创建它。因此,您可以创建与它的默认构造函数不同的任何东西。或long
的默认值。您有两个选项:
如果该值不存在,则设置为您想要的值:
if (my_map.find(i) == my_map.end()) {
my_map[i] = MAX_INT; //Or whatever you want.
}
或者使用默认构造函数为long
创建自己的包装类:
struct DefLong {
long myLong;
long& operator() {
return myLong;
}
DefLong () : myLong(MAX_INT){}
}
....
static unordered_map<int, DefLong> my_map;
auto& result = my_map[i];
long otheresult = my_map[i];
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 让bool方法返回其他整数
- 为什么 c++ 中的 main() 函数不采用除 int 和 void 之外的任何其他返回类型
- 为什么重载运算符可以返回其返回类型以外的其他内容?
- Sizeof返回的是指针大小,而不是数组大小.有其他方法可以找到尺寸吗
- 在存储库中,筛选器函数返回动态向量或其他存储库
- SetWindowsHookEx 在挂接到其他线程时返回 NULL
- 如果创建支持返回可变参数类型列表的通用模板 API,我应该使用 std::tuple 还是其他东西?
- 如何根据枚举参数返回其他类型
- 当从其他方法返回 vector 时,C++无法访问矢量元素
- 如何在 CUDA 中的块中返回其他线程
- 如何将c 返回值列表或其他复杂类型的QML列表
- 在构造函数以外的任何其他位置访问相机时,我的相机指针返回 null
- 在参数包中获取函数指针的返回类型,并将其保存为与其他参数连接的元组
- C 使用功能定义中的if/其他语句以返回最小的数字
- 具有参考参数的函数不与其他函数返回的值一起工作
- 这个函数何时以及为什么会返回其他东西
- 如果在映射中没有找到键,则返回其他值
- 返回其他类对象的c++类getter中的错误
- 当函数返回类数据成员时,我如何返回其他东西