1、map表的插入与数据更新问题
当map表中已经有了某个key值,如果我们再向里面插入同样的key值,我们理所当然的认为,如果Key值存在则更新数据。经测试发现,这种看法是错误的,如果key值存在则会返回失败,不会更新对应的数据。那如何想map表中插入和更新数据呢?应该是要先判断key值是否存在,不存在则Insert插入,存在则Update数据值,相关代码如下所示(用模版实现更通用):
template <class T1,class T2>
void InsertOrUpdateItem( std::map<T1, T2>& mapList, T1 key, T2 tValue )
{
std::map<T1, T2>::iterator iter = mapList.find( key );
if ( iter != mapList.end() )
{
iter->second = tValue;
return;
}
else
{
mapList.insert( iter, std::make_pair( key, tValue ) );
}
}
上述代码是没问题的,考虑的也很周全。其实还有一种最简单的方法,直接这样写就能实现上述两种情况的处理:mapList[key] = Value。
2、map表的排序问题
经测试发现,插入map表的数据,会自动排序(即按Value数据值排序)。其实很多时候,我们不想让数据自动排序,或者按照自己的规则排序,则不能用map表,转而使用vector或者list。