如何捕获std :: map引起的异常?

时间:2011-06-23 05:47:44

标签: c++

我已经宣布了这样的地图

map<long long, list<SoundInfo *> > m_soundListMap;

我也有这个功能

void addSoundInfo(long long deviceId, SoundInfo * info)

我正在尝试将与设备ID关联的声音信息添加到地图中。在此函数中,我假设已将键和值对添加到地图中。所以我可以检索声音信息列表并将传入的声音信息添加到列表的后面。

我想在地图没有密钥的情况下捕获异常,然后我可以创建密钥和值对并插入到地图中。

如何在C ++中捕获此异常?

提前致谢...

5 个答案:

答案 0 :(得分:3)

std::map::operator[]返回对具有指定键的条目的引用;如果不存在这样的条目,则插入新条目(使用指定的键和默认构造的值),并返回对该条目的引用。 当分配内存失败时,它会抛出异常(std::bad_alloc)。

听起来你可能会发现a good introductory C++ book很有用。

答案 1 :(得分:2)

  

如果我尝试获取列表并且地图没有密钥会发生什么?

取决于您如何尝试获取该项目。

list<SoundInfo*>& info_list = m_soundListMap[55];

将创建一个空列表,将其插入到地图中,并在该键尚不存在时返回该列表。

typedef map<long long, list<SoundInfo *> >::iterator iterator;
iterator iter = m_soundListMap.find(55);

将迭代器返回到同时包含键和值的对,或者如果键不存在则返回map::end()iter->second将是list<SoundInfo*>

答案 2 :(得分:0)

使用map::find检查地图是否已具有与特定键相关联的任何值。

答案 3 :(得分:0)

您可以使用m_soundListMap.find(x)查找该值。这将返回一个迭代器。如果迭代器是m_soundListMap.end(),则找不到密钥,如果需要可以插入。 没有例外被抛出。

答案 4 :(得分:0)

我认为你需要这个。

if(m_soundListMap.find(SomeLongVar) != m_soundListMap.end())
{  
  //Element found, take a decision if you want to update the value  
}  
else   
{  
  //Element not found, insert  
}