0

情况1

void insert(map<string, vector<int>> &y,const string &x)
{
vector<int> v=y[x];
if(!y.count(x)>0)
  {
    ...
  }
}

案例2

void insert(map<string, vector<int>> &y,const string &x)
{
//vector<int> v=y[x];
if(!y.count(x)>0)
   {
   ...
  }
}

在第一种情况下,if 语句为真。在第二种情况下,if 为假。在这两种情况下,起初 y[x] 的大小都是零。但是在将 y[x] 分配给 v 之后的第一种情况下,y[x] 的大小变为 1。

这是怎么发生的?还有我们如何在不影响 y[x] 的情况下将 y[x] 分配给 v?

4

1 回答 1

2

因为map::operator[]如果传递给它的键尚不存在,则会创建一个具有默认构造值的键值对。

如果您不希望这样,请使用map::at(如果键不存在,则会引发异常,因此您必须处理该问题)或map::find(将迭代器返回到具有该键的元素的迭代器,或者map::end如果没有这样的键元素)。

于 2013-09-20T21:39:35.823 回答