如何将无序映射的值设置为 0 以外的数字
Posted
技术标签:
【中文标题】如何将无序映射的值设置为 0 以外的数字【英文标题】:How to set value of an unordered map to number other than 0 【发布时间】:2020-11-28 10:29:21 【问题描述】:当我声明一个无序映射时,默认情况下所有值都分配为 0。但我想将所有值分配为 -1。有什么办法吗?
例如看这段代码
#include <iostream>
#include <unordered_map>
using namespace std;
unordered_map<int, int> umap;
int main()
cout<<umap[10];
此代码的输出为 0。请注意,未分配的位置默认输出为 0。我的问题是,有什么办法可以改变这个并分配一个我喜欢的号码?
【问题讨论】:
注意:如果元素不存在,umap[10]
实际上会插入到地图中。您的 cout 线路正在修改地图。
^ @spectras 所说的是整个问题。您的示例中没有“所有值”。只要您写umap[10]
,您就会在地图中创建一个值。由于您不分配值,因此使用默认构造函数。如果你要写类似cout<<umap[10]=-1;
的东西,那就不一样了。
当访问umap[10]
并且没有找到实例时,会放入一个默认的(值)构造元素。因此对于unordered_map<int,int>
,它将始终是0
。您可以将int
替换为与int
兼容的类,默认构造函数为-1
,但不确定这是否明智。
【参考方案1】:
您可以使用默认构造函数创建自定义类型以初始化为-1
:
struct MyInt
int i = -1;
;
unordered_map<int, MyInt> umap;
如果您不想键入 .i
访问器,可以提供 operator int()
和其他运算符来模仿常规 int
的行为。
【讨论】:
以上是关于如何将无序映射的值设置为 0 以外的数字的主要内容,如果未能解决你的问题,请参考以下文章
如何将数字范围映射到 SQL Server 或 Clickhouse 中的数字