| 统计 |
blog名称:人在旅途 日志总数:175 评论数量:505 留言数量:13 访问次数:1679221 建立时间:2005年12月7日 |
生命是过客,人在旅途。奶奶是信基督教的,没啥文化,却养育了四子二女,还带过九个孙辈。老人家对生命的看法就是“人都是客人,迟早要回去的。”就以《人在旅途》来纪念她。

| « | November 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | | | |
|
| 公告 |
本人上传的源程序中可能引用或使用了第三方的库或程序,也可能是修改了第三方的例程甚至是源程序.所以本人上传的源程序禁止在以单纯学习为目的的任何以外场合使用,不然如果引起任何版权问题,本人不负任何责任. | |

|
本站首页 管理页面 写新日志 退出
调整中...
[微软技术开发]How to use map of STL |
人在旅途 发表于 2006/1/22 10:20:40 |
The function contain is the main function support by the STL, though MFC has many contain class like carray,clist.... But when you meet the event that you can't use MFC(like develop ATL project), you will like to use it and these C++ STL class are template.
Now I will record some thoughts and experience about using map. Like following:
///////////////////////////////////////////////////////////////////////
#include "map"using namespace std ;
class CTask{public: int x; char pX[50]; CTask() ; ~CTask() ;
void operator = (CTask& task) { x = task.x; memcpy(pX,task.pX,50); AfxMessageBox("="); };};
typedef map<int, CTask> INT2TASK;
CTestxApp theApp;CTask::CTask() { x = 0;} CTask::~CTask() { }
INT2TASK theMap; INT2TASK::iterator theIterator; CTask task1 ; task1.x = 100; strcpy(task1.pX,"100"); theMap.insert(INT2TASK::value_type(0,task1));
task1.x = 1000;
CTask* task2; theIterator = theMap.find(0); task2 = &((*theIterator).second); task2->x = 500; strcpy(task2->pX,"500"); theIterator = theMap.find(0); task2 = &((*theIterator).second); theMap.clear();
Important:
1. The class you put to the map template, can't has any new or create function in the create function,because it will not be called in it's function "insert(...)", and the "insert(...)" will only use the memcpy(...) to duplicate a new object instance and save it in the map. So you can safely delete the resource object.
2. When you call the map function "clear()", it will delete all objects in the map, ofcourse it will voke the destructor function of the object.
3. When you want get a object from the map, there is two way:
a. CTask* task2; theIterator = theMap.find(0); task2 = &((*theIterator).second);
//what you get is the reference(point) of the object, so you can change it and the result will be saved in the map.
b. CTask task2; theIterator = theMap.find(0); task2 = (*theIterator).second;
//what you get is a copy of the object(a new object), this time the function "operate =" of the CTask will be called(if has such function). So what you chang with the task2 will not affect the object in the map.
|
阅读全文(2200) | 回复(0) | 编辑 | 精华 |
|