更改STL映射的分配值

时间:2014-03-05 12:46:21

标签: c++ map stl

当我创建std::map时,所有索引最初都指向无处。一旦我打电话给他们,他们就分配并分配了值0。

例如:

map <int, int> x;
cout << x.[31233];

输出为0

但是,我需要将所有标准指定值设为(-1)而不是0

我该如何更改?

3 个答案:

答案 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_typeintint()为零初始化,因此结果为零。

如果你想使用不同的默认构造,你有选项,其中最极端的是为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值。