案例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语句为true。在第二种情况下,if是错误的。在两种情况下,首先y [x]的大小为零。但在将y [x]赋值给v后的第一种情况下,y [x]的大小变为1.
这是怎么发生的?而且我们如何将y [x]分配给v而不影响y [x]?
答案 0 :(得分:2)
因为如果传递给它的密钥尚不存在,map::operator[]
会创建一个带有默认构造值的键值对。
如果您不希望这样,请使用map::at
(如果密钥不存在则抛出异常,因此您必须处理该异常)或map::find
(返回迭代器)使用该键的元素,如果没有这样的元素,则为map::end
。