STL中的map表的使用问题
2014-02-27 23:34
295 查看
1、map表的插入与数据更新问题
当map表中已经有了某个key值,如果我们再向里面插入同样的key值,我们理所当然的认为,如果Key值存在则更新数据。经测试发现,这种看法是错误的,如果key值存在则会返回失败,不会更新对应的数据。那如何想map表中插入和更新数据呢?应该是要先判断key值是否存在,不存在则Insert插入,存在则Update数据值,相关代码如下所示(用模版实现更通用):
2、map表的排序问题
经测试发现,插入map表的数据,会自动排序(即按Value数据值排序)。其实很多时候,我们不想让数据自动排序,或者按照自己的规则排序,则不能用map表,转而使用vector或者list。
当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。
相关文章推荐
- [STL] __gnu_cxx::hash_map使用中的一些问题
- STL中map的使用问题
- STL hash_map使用
- 跨dll使用template/STL需要注意的问题
- CCTMXTiledMap中使用.tmx地图编辑器需要注意的路径问题导致的热更后报错
- ibatis resultMap使用的问题
- STL unique使用问题
- STL之Map使用小结
- STL中map的简单使用简介【转】
- Map使用中的问题 异常java.util.ConcurrentModificationException
- 小心使用STL中map的[]操作符[转]
- STL之关联容器(pair、map、set的使用)
- c++ stl 使用汇总(string,vector,map,set)
- 跨dll访问STL的map的问题
- STL中关于map和set的四个问题
- VC中使用STL的hash_map
- 使用STL中map的[]操作符方法
- stl map的基本使用
- stl中使用智能指针的问题
- STL中list,vector,deque,map,set区别、联系和使用场景原理