-1

当我不知道键是否存在于映射中时,如何从映射中修改键值对的值?

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

a[5]   =    " H ";

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

a[5]   =   " G ";

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

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

有没有其他方法可以从地图中修改键值对的值???谢谢!!!

4

3 回答 3

4

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

a[5] = " G ";

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

于 2012-06-25T15:52:34.330 回答
2

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

C++11添加了一个新at方法,如果映射中不存在键,则抛出该方法,这使得可以索引到const map.

于 2012-06-25T15:52:58.327 回答
1

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

pos->second = " G ";

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

于 2012-06-25T15:53:35.963 回答