【发布时间】: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,但不确定这是否明智。
标签: c++ unordered-map