如何修改地图中键值对的值,而我不知道地图中是否存在该键?

时间:2012-06-25 15:50:39

标签: c++ map stl iterator

如何修改地图中键值对的值,而我不知道地图中是否存在该键?

例如,地图中有一个键值对:

a[5]   =    " H ";

//但经过一些操作,如插入,擦除等;我不知道地图中是否仍然存在5,我可以像这样修改它吗?:

a[5]   =   " G ";

//或者我必须定义一个iteraotr pos

pos = my_map.find(5);
if( pos !=  my_map.end())
{
 pos->second   =   " G ";
}

还有其他方法我可以从地图修改键值对的值吗???感谢!!!

3 个答案:

答案 0 :(得分:3)

如果要设置值是否存在,请继续使用下标运算符:

a[5] = " G ";

如果不存在,它将创建一个新的映射。这是由C ++标准保证的。

答案 1 :(得分:1)

标准映射具有奇怪的属性,索引到映射中不存在的元素会导致在该键和默认构造值之间创建关联。因此,如果元素5不作为地图中的关键字出现,则在执行a[5]后,它将存在并与空字符串关联。

C ++ 11 添加了一个新的at方法,如果地图中不存在该键,则会抛出该方法,从而可以索引const map。< / p>

答案 2 :(得分:1)

find()的示例中,您可以通过返回的迭代器修改值:

pos->second = " G ";

如果您只想修改它是否已存在,则应使用此方法,因为operator[]将创建新条目(如果它当前不存在)。如果要添加或修改它,请使用operator[]