首页 > 代码库 > lambda表达式给map赋值

lambda表达式给map赋值

今天有个需求,要把各文件后缀与不同文件图标对应起来,即一对多的关系,一个图标对应多文件类型。
本来想在类中放个常量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)。

求大神拍砖!