当我创建std::map
时,所有索引最初都指向无处。一旦我打电话给他们,他们就分配并分配了值0。
例如:
map <int, int> x;
cout << x.[31233];
输出为0
。
但是,我需要将所有标准指定值设为(-1)
而不是0
。
我该如何更改?
答案 0 :(得分:2)
在此定义之后
map <int, int> x;
地图没有元素。要添加包含键31233
和值-1
的元素,您可以编写
x[31233] = -1;
你不能这样做,默认值为-1,因为根据C ++标准相对于下标运算符
如果地图中没有等效于x的键,则将value_type(x,T())插入地图
对于类型int
int()
,零初始化相应的对象。
否则,您应该使用一些insert
方法,您将明确指定初始值。
答案 1 :(得分:1)
给定std::map<key_type, value_type>
,如果不存在,则通过operator [](cont key_type&)
查找任意密钥会自动插入value_type()
用于所述密钥。在您的情况下,value_type
为int
,int()
为零初始化,因此结果为零。
如果你想使用不同的默认构造,你有选项,其中最极端的是为int
编写一个自定义分配器,为construct
编写一个int
成员。 1}}值类型(yuck)。我想你可能会觉得简单易行:
std::map <int, int> x;
// load map with values...
int res = -1;
auto it = x.find(31233);
if (it != x.end())
res = x.second;
// use res here.
答案 2 :(得分:0)
当您打算插入新值时,您应该停止使用operator[]
,而是使用insert()
。如果你想为从未插入的东西设置一个“默认”值,那么最好编写一个你自己的容器,它在内部使用一个map并暴露类似于get()方法的东西,它从地图返回存储的值或者-1如果没有找到。这样就可以避免存储大量不需要的-1值。