最后还是妥协了,就用了一个普通的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表达式给map赋值,布布扣,bubuko.com
原文:http://blog.csdn.net/yuanxiaobo007/article/details/25183535