首页 > 代码库 > lambda表达式给map赋值
lambda表达式给map赋值
今天有个需求,要把各文件后缀与不同文件图标对应起来,即一对多的关系,一个图标对应多文件类型。
本来想在类中放个常量map,结果发现常量map初始化是个问题,包括二维数据初始化,网上大部分人都说用static const ,还真是挺麻烦,这个算是个C++的缺陷吗?
再写个函数初始化它.也不叫初始化了,叫赋值.
感觉写麻烦了,不过还是觉的lambda有意思 (vs2010中的c++0x 非11)。
本来想在类中放个常量map,结果发现常量map初始化是个问题,包括二维数据初始化,网上大部分人都说用static const ,还真是挺麻烦,这个算是个C++的缺陷吗?
最后还是妥协了,就用了一个普通的map成员(实在没想到还有哪个比较好的一对多数据结构).
//文件类型与文件图标对应关系 map<CString, list<CString>> m_mapFilesIcon;
再写个函数初始化它.也不叫初始化了,叫赋值.
void CClassRoomUIAgent::InitFilesIcon() { m_mapFilesIcon.clear(); const int ICONSNUM = 9; const CString Icons[ICONSNUM] = { _T("ico_img.png") , _T("ico_music.png") , _T("ico_pdf.png") , _T("ico_ppt.png") , _T("ico_practice.png") , _T("ico_txt.png") , _T("ico_video.png") , _T("ico_wps.png") , _T("ico_xls.png") }; const CString Files[ICONSNUM][10] = { {_T(".bmp"), _T(".jpg"), _T(".png")}, //图片类型 {_T(".mp3"), _T(".wav")}, //声音类型 {_T(".pdf")}, //pdf文件 {_T(".ppt")}, //ppt {_T(".pptx")}, //练习文件 {_T(".txt")}, //文本 {_T(".rmvb"), _T(".avi")}, //视频 {_T(".doc"), _T(".docx")}, //doc {_T(".xls")}, //表格 }; static int iCur = 0; for_each(Icons, Icons + ICONSNUM, [&](CString strExt)->void { list<CString> lstFiles; for_each(Files[iCur], Files[iCur] + ICONSNUM, [&lstFiles](const CString& ext)->void { if (!ext.IsEmpty()) { lstFiles.push_back(ext); } }); this->m_mapFilesIcon.insert(std::make_pair(strExt, lstFiles)); iCur++; lstFiles.clear(); }); iCur = 0; }
感觉写麻烦了,不过还是觉的lambda有意思 (vs2010中的c++0x 非11)。
求大神拍砖!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。