混乱:在备忘过程中检查地图中某个键的值是否存在

时间:2018-06-27 05:40:46

标签: if-statement hashmap memoization

所以我有2个问题:

Q1:我看到很多代码,它们在其中检查键的现有值,如下所示:

map<string,int> MAP; // lets say this is the map
if (MAP [REC [iter_i]])    // the key is basically a string  
    use previously calculated value 
else    
    perform recursion and obtain value 

我对if语句有点困惑。它会检查该键是否没有值,因此是否为空,还是会检查该键的值是否为零?两者是不同的东西。例如,该值可能为零,该值是先前计算的,但是如果使用后一种逻辑,它将继续进行重新计算,而不会真正使用较早的存储值。

Q2:我正在尝试用C ++实现下面的地图

map<int,string> check;

在我的代码中的某处,我正在这样做:

string k; // defining a new string
if (check[iter_i]) // check if a value exists for the key iter_i
{
k = check[iter_i];  // assign that value to string k
}
else  // if the key hasn't been assigned a value, then assign as below
{
k = some string s;    //get k from somewhere else
check[iter_i] = k     // assign this k as value to the key 
}

当我这样做时,it gives me this error

在那之后,我想,如果在定义地图本身时初始化值check[i] = " ", for all i,则可以采用另一种方法。然后,我的if语句仅需要检查映射值是" "还是其他字符串。

这样做时,我在定义地图时遇到了问题。我是这样定义的:

map<int,string> check(2000," ");

代码显示了一些我无法理解的错误,我认为我在定义地图时犯了一个新手错误。我究竟做错了什么?

0 个答案:

没有答案