您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 创业/孵化 > C++ 中的map容器
※1※C++中的map容器内容提要:在标准模板库(STL)中提供了很多的容器,它们是存储对象的对象。本文主要介绍STL中的关联容器——map容器,内容包括map::begin、map::clear、map::count、map::empty、map::end等27种函数。本容器是以模板的形式设计的,能应用于广泛的数据类型。关键字:begin、clear、count、empty、end、find引言:map是一个容器,它用于储存数据并且能从一个数据集合中取出数据。它的数据组成包含两项,一个是它的数据值,一个是用于排序的关键字。其中关键字是惟一的,它用于将数据自动排序。而每个元素的数据值与关键字无关,可以直接改变。正文:1map容器map容器简介:map是一个容器,它用于储存数据并且能从一个数据集合中取出数据。它的数据组成包含两项,一个是它的数据值,一个是用于排序的关键字。其中关键字是惟一的,它用于将数据自动排序。而每个元素的数据值与关键字无关,可以直接改变。需加载的头文件:#includemapusingnamespacestd;模板原型:templateclassKey,classType,classTraits=lessKey,classAllocator=allocatorpairconstKey,Type说明:表1为map的参数说明。表1map的参数说明参数含义Key存储在map容器中的关键字的数据类型Type储存在map容器中的数据值的数据类型Traits它是一个能提供比较两个元素的关键字来决定它们在map容器中的相对位置。它是可选的,它的默认值是lesskeyAllocator它代表存储管理设备。它是可选的,它的默认值为allocatorpairconstKey,Typemap容器有以下的特点:(1)它是一个相关联的容器,它的大小可以改变,它能根据关键字来提高读取数据能力。(2)它提供一个双向的定位器来读写取数据。(3)它已经根据关键字和一个比较函数来排好序。(4)它的每一个元素的关键字都是惟一的。(5)它是一个模板,它能提供一个一般且独立的数据类型。成员变量:map的成员变量说明如表2所示。※2※表2map的成员变量说明成员变量功能说明Allocator_type对象分配器Const_iterator提供一个双向的定位器,它能读取map中的一个常元Const_pointer它能提供到一个常元的指针Const_reference一个常元地址Const_reverse_iterator提供一个双向的定位器,使得能够在map容器中读取任意一个常值元素Difference_type它提供map容器中由定位器所指定的范围内的元素的个数Iterator提供一个双向入口定位器,使得能够在map中读取或者修改元素key_compare它是提供一个元素间的关键字的次序关系的函数key_type它描述每一个元素的关键字mapped_type它表示存储在map容器中的数据类型pointer提供一个指向map中的某元素的指针reference提供在map容器中的一个常元的地址reverse_iterator在反向的map容器中提供一个双向的入口定位器,使得能够读取或者修改元素size_typemap容器中元素个数Value_type它提供一个能根据关键字来比较两个元素的相对位置的函数下面介绍map的成员函数。1.1map::begin功能:返回第一个元素的定位器(iterator)的地址。语法:const_iteratorbegin()const;iteratorbegin();说明:当返回的第一个元素的地址值为一个常值定位器(_iterator),则map不会被修改。当返回的第一个元素的地址值为一个定位器(iterator),则map可被修改。函数返回值:返回一个指向第一个元素的双向定位器地址。示例:/***************************************************程序编号:1程序功能说明:用begin来定位到ctr的开始位置,并打印出该元素。***************************************************/#includemap#includeiostreamintmain(){usingnamespacestd;mapint,charctr;mapint,char::iteratorcp;ctr.insert(pairint,char(1,'a'));ctr.insert(pairint,char(2,'b'));cp=ctr.begin();//定位到ctr的开始位置coutThefirstelementis:cp-secondendl;//打印出第一个元素※3※return0;}运行结果:运行结果如图1所示。图1程序运行结果1.2map::clear功能:将一个map容器的全部元素删除。语法:voidclear();说明:clear会删除map容器的全部元素。函数返回值:无。示例:/***************************************************程序编号:2程序功能说明:先创建一个map容器,再用clear函数清空,最后打印是否为空的信息。***************************************************/#includemap#includeiostreamintmain(){usingnamespacestd;mapint,charctr;ctr.insert(pairint,char(1,'a'));ctr.insert(pairint,char(2,'b'));ctr.insert(pairint,char(3,'c'));ctr.clear();//清空map容器if(ctr.empty())//map容器为空时coutThecontainerisemptyendl;else//map容器为非空时coutThecontainerisnotemptyendl;return0;}运行结果:运行结果如图2所示。图2程序运行结果※4※1.3map::count功能:返回对应某个关键字的元素的个数。语法:size_typecount(constKey&_Key)const;说明:_Key是要进行匹配的关键字的值。该函数的返回值的范围是[low_bound(_Key),upper_bound(_Key)]。因为map容器的关键字是惟一的,故它只能取0或者1。函数返回值:当map容器包含了关键字为_Key的这个元素时,返回1,否则返回0。示例:/***************************************************程序编号:3程序功能说明:先创建一个map容器,再用count函数来求出关键字为1的元素的个数。***************************************************/#includemap#includeiostreamintmain(){usingnamespacestd;mapint,charctr;ctr.insert(pairint,char(1,'a'));ctr.insert(pairint,char(2,'b'));ctr.insert(pairint,char(1,'c'));inti;i=ctr.count(1);//求出关键字为1的元素的个数if(i==0)coutThereisnosuchkey!endl;elsecoutThenumberofkeyis:iendl;return0;}运行结果:运行结果如图3所示。图3程序运行结果1.4map::empty功能:测试一个map容器是否为空。※5※语法:boolempty()const;说明:empty函数用于测试一个map容器是否为空。函数返回值:当容器map为空时,返回true,否则返回false。示例:/***************************************************程序编号:4程序功能说明:创建一个map容器,打印是否为空的信息。***************************************************/#includemap#includeiostreamintmain(){usingnamespacestd;mapint,charctr;if(ctr.empty())//map容器为空时coutThecontainerisemptyendl;else//map容器为非空时coutThecontainerisnotemptyendl;return0;}运行结果:运行结果如图4所示。图4程序运行结果1.5map::end功能:返回最后一个元素后面的定位器(iterator)的地址。语法:const_iteratorend()const;iteratorend();说明:end函数用于测试一个定位器是否已达到它的尾部。函数返回值:返回一个指向最后一个元素后面的双向定位器地址。当map容器为空时,结果没定义。示例:/***************************************************程序编号:5※6※程序功能说明:先初始化一个map,再打印其中的内容,最后显示出最后一个元素的值。***************************************************/#includemap#includeiostreamusingnamespacestd;intprint(mapint,intc)//用于打印一个map{mapint,int::const_iteratorcp;for(cp=c.begin();cp!=c.end();cp++)//让cp从c的开始到结束打印cp对应的值coutcp-second;return0;}intmain(){mapint,intctr;mapint,int::const_iteratorcp;inti;for(i=0;i3;i++)ctr.insert(pairint,int(i,i));//给ctr赋值coutThectris:;print(ctr);//调用子程序来打印ctr的内容coutendlThelastelementis:;cp=ctr.end();//让cp指向最后一个元素的位置cp--;coutcp-secondendl;//显示最后一个元素的值return0;}运行结果:运行结果如图5所示。图5程序运行结果1.6map::equal_range功能:返回一对定位器,它们分别指向第一个大于或等于给定的关键字的元素和第一个比给定的关键字大的元素。语法:pairconst_iterator,const_iteratorequal_range(constKey&_Key)const;pairiterator,iteratorequal_range(※7※constKey&_Key)const;说明:_Key是一个用于排序的关键字。函数返回值:返回一对定位器。要从第一个定位器中取得数据,可用pr.first。从第二个定位器中取得数据,则用pr.second。示例:/***************************************************程序编号:6程序功能说明:先初始化一个map,再打印其中的内容,最后打印出关键字=2或2的元素。*************************
本文标题:C++ 中的map容器
链接地址:https://www.777doc.com/doc-6184904 .html