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)。

求大神拍砖!

lambda表达式给map赋值

时间: 2024-11-05 16:36:31

lambda表达式给map赋值的相关文章

lambda表达式,map函数

lambda只是一个表达式,不需要定义函数,故也是匿名函数,用法为:lambda 参数:表达式. x=5 list1=[2,3,4] list2=[10,20,30] s=lambda x:x**3 g=lambda x,y:x+y print(s(x)) print(g(list1,list2)) 测试结果: E:\Anaconda3\python.exe E:/python知识.py 125 [2, 3, 4, 10, 20, 30] 进程已结束,退出代码 0 map函数,它接收一个函数和若

java8新特性-Lambda表达式(二)

Java8新增了java.util.funcion包,里面包含常用的函数接口,这是Lambda表达式的基础,Java集合框架也新增部分接口,以便与Lambda表达式对接. Collections中的常用函数接口 Java集合框架的接口继承结构: 上图中蓝色标记和橙色标记的接口类,表示在Java8中加入了新的接口方法,由于继承关系,他们相应的子类也会继承这些方法. 下面用一张表列举这些方法 接口名 Java8新加入的方法 Collection removeIf() spliterator() st

【Java学习笔记之三十一】详解Java8 lambda表达式

Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出.Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码.这样有时可读性更好,表达更清晰.在Java生态系统中,函数式表达与对面向对象的全面支持是个激动人心的进步.将进一步促进并行

Java8 lambda表达式10个示例

本文由 ImportNew Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出.Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码.这样有时可读性更好,表达更清晰.在Java生态系统中,函数式表达与对面向对象的全面

java8 Lambda表达式的10个例子(转)

原文:http://jobar.iteye.com/blog/2023477 Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 Java代码 收藏代码//Before Java 8: new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8, too much code for too little to do");

Java 8 Lambda表达式10个示例【存】

PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出.Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码.这样有时可读性更好,表达更清晰.在Java生态系统中,函数式表达与对面向对象的全面支持是个激动人心的进步.将进一步促进并行第三方库的发展,充分利用多核CPU.尽

Java 8 lambda表达式20180404

Java 8 lambda表达式示例 我个人对Java 8发布非常激动,尤其是lambda表达式和流API.越来越多的了解它们,我能写出更干净的代码.虽然一开始并不是这样.第一次看到用lambda表达式写出来的Java代码时,我对这种神秘的语法感到非常失望,认为它们把Java搞得不可读,但我错了.花了一天时间做了一些lambda表达式和流API示例的练习后,我开心的看到了更清晰的Java代码.这有点像学习泛型,第一次见的时候我很讨厌它.我甚至继续使用老版Java 1.4来处理集合,直到有一天,朋

Python学习-lambda表达式

lambda只是一个表达式,函数体比def简单很多.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去.lambda表达式是起到一个函数速写的作用.允许在代码内嵌入一个函数的定义. #求三个数的和1 f = lambda x,y,z:x+y+x 2 print(f(1,2,3)) #4 3 4 f = lambda x,y,z:x+y+z 5 print(f(1,2,3)) #6 在常规的def函数构造中,可以有任意数量的语句,并且在def函数定义中

lambda表达式语法与函数式编程接口

java8中lambda表达式的两种语法 1.(parameters) ->expression   单表达式 2.(parameters) ->{statements;}  语句 语法解释 (parameters),lambda表达式的参数列表,其定义方法为JAVA普通的方法相同,例如(Object a, Object b). -> 箭头,是参数列表与lambda表达式主题部分的分隔符号. ------------------------------------------------