map[]的正确使用:自以为是导致map的一个错误使用

原创 2007年09月29日 05:33:00

今天自己写的棒视图模块与系统联调时出错,花了我一个多小时,终于找出出错原因:简单的说就是没有理解透map型的[]操作符的内在机理,代码表现为:

class A

{

BOOL RefrshBar(int nID);

map<int,structTstPntInfo*> m_map;//成员变量,structTstPntInfo是一个自定义结构

}

 

BOOL A::RefrshBar(int nID)

{

structTstPntInfo* stB = m_map[nID] ; 

...

}

将调用我这个模块的人在刷新时指定了一个不存在的棒图nID时,这个成员变量中就增加了一个对此nID的映射,

这样导致其它信赖这个成员变量的成员函数就会出错:m_map中多了逻辑上不存在的映射关系;

而我自以为是此种写法没有向m_map中增加实例,仅当对m_map赋值时才向他内部增加一个实例即映射关系,

形如:structTstPntInfo  = stA; m_map[niD] = &stA; 事实上从map中取映射值时也会向map中增加实例;

总结:

1。对map的重载操作符[]而言,情况是不是这样的:只要调用了这个重载符,则首先向内部找是否存在这个映

射,若无则增加一个实例。

2。我在工作以外(生活中)还有多少自以为是的地方!!!若也有很多如此在自以为是,真是恐怖!!!我在生活中又应该如何不要犯如此自以为是的错误呢?这也是我现在想想就从床上爬起来写下这些的一个重要原因(现在是20070929凌晨5:36)

对于我这个总结我不能再犯自以为是的错误,有两点明天要查明:

1。[]是不是map的重载符;

2。是不是调用[]时,先查找映射关系,若不存在就产生一个实例;

 

 

map函数的简单使用,和用pair判断的有无正确插入

#include #include #include using namespace std; struct Student{ string name; int score; }...

正确使用STL-MAP中Erase函数

第一讲 在STL标准里面,map的erase函数的返回值确如下: map.erase有3个重载: void erase ( iterator position ); size_type erase (...

stl之map erase方法的正确使用

stl之map erase方法的正确使用 STL的map表里有一个erase方法用来从一个map中删除掉指令的节点 eg: map mapTest; typedef map::iterator IT...

正确使用stl map的erase方法

先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map....
  • cbNotes
  • cbNotes
  • 2014年08月18日 17:09
  • 542

stl之map erase方法的正确使用

STL的map表里有一个erase方法用来从一个map中删除掉指令的节点 eg: map mapTest; typedef map::iterator ITER; ITER iter=mapT...

android使用google map api 出现INSTALL_FAILED_MISSING_SHARED_LIBRARY 错误

今天写了一个android关于google map的应用,模拟器上运行一切正常(就是个测试程序),但是在真机上报错无法加载提示INSTALL_FAILED_MISSING_SHARED_LIBRARY...

MS-VC 使用MAP文件快速定位错误行 .

****************************************************************************************************...
  • QQIANQQ
  • QQIANQQ
  • 2011年07月05日 16:32
  • 1636

VC的CMap类和STL的map的使用及使用过程中遇到的错误

VC的CMap类和STL的map的使用及使用过程中遇到的错误 1、CMap类:映射表类(CMap)是MFC集合类中的一个模板类,它是对Hash表的一种实现,也称作为“字典”,就像一种只有两列的表格,一...

在使用ajax接收返回map的时候,提示406错误

在使用ajax接收返回map的时候,提示406错误 这时因为springMVC3.x和springMVC4.x所以来的jackson的jar包有所改变,我们以maven来说明 在3.x中,为 ...

使用map+函数指针代替switch和if-else的一个例子

很多时候我们都会遇到用switch或者if-else来进行大量判断的情况,如下面的例子int code = 4; switch (code) { case 0: // break...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:map[]的正确使用:自以为是导致map的一个错误使用
举报原因:
原因补充:

(最多只允许输入30个字)