使用`[]`访问map <int,int>

时间:2017-10-25 01:10:07

标签: c++ dictionary

我对c ++比较陌生,而且我遇到了一段代码,我无法理解它。我有以下未初始化的地图

map<int,int> fq

以及以下int个变量:

int ans=0
int sum=-1

以下代码就是我遇到的问题:

++fq[sum]
sum*=2
ans+=fq[-sum]

默认情况下是否会以某种方式分配密钥?我猜是

++fq[sum] sets key:1 to -1 and key:2 to -2 and so on...

但我不知道ans+=fq[-sum]是如何运作的。是否添加key并将其添加到ans

1 个答案:

答案 0 :(得分:2)

使用C ++ $foo = strtolower(trim($_REQUEST['foo'] ?? '')); 类型,如果使用选择运算符(std::map)查找不存在的键,则地图将自动为您插入新的键/值对。与键关联的值将是与值类型关联的默认值。对于operator [] s,那是0,所以如果你查找不存在的东西,你可以依赖int放入值0。

例如,如果你写

std::map

++fq[sum]; 不是sum中的关键字,会发生以下情况:

  • 地图会将fq作为键插入地图中,其值为0。
  • 然后地图返回对新创建的0值的引用。
  • 该值会增加。

净效果是sum最终为1.这是可移植行为,您可以依赖它在不同系统中以这种方式工作。