您好,欢迎访问三七文档
#includemap#includevector#includeiostream#includestringusingnamespacestd;voidmain(){mapstring,vectorintmi;vectorintvect1;vectorintvect2;vectorintvect3;for(inti=0;i5;i++){vect1.push_back(i);vect2.push_back(i);vect3.push_back(i);}mi.insert(make_pair(dog,vect1));mi.insert(make_pair(cat,vect2));mi.insert(make_pair(fish,vect2));mapstring,vectorint::iteratoriter=mi.begin();for(;iter!=mi.end();iter++){vectorint::iteratorit=iter-second.begin();for(;it!=iter-second.end();it++){cout*it\t;}cout\n;}}MAP使用方法2010-04-1515:42:44一、map的说明1头文件#includemap2定义mapstring,intmy_Map;或者是typedefmapstring,intMY_MAP;MY_MAPmy_Map;3插入数据(1)my_Map[a]=1;(2)my_Map.insert(mapstring,int::value_type(b,2));(3)my_Map.insert(pairstring,int(c,3));(4)my_Map.insert(make_pair(d,4));4查找数据和修改数据(1)inti=my_Map[a];my_Map[a]=i;(2)MY_MAP::iteratormy_Itr;my_Itr.find(b);intj=my_Itr-second;my_Itr-second=j;不过注意,键本身是不能被修改的,除非删除。5删除数据(1)my_Map.erase(my_Itr);(2)my_Map.erase(c);还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。6迭代数据for(my_Itr=my_Map.begin();my_Itr!=my_Map.end();++my_Itr){}7其它方法my_Map.size()返回元素数目my_Map.empty()判断是否为空my_Map.clear()清空所有元素可以直接进行赋值和比较:=,,=,,=,!=等等更高级的应用查帮助去吧,^_^;二\map的举例要求:将mymap中itemstruct的a大于100的项删除structitemstruct{inta;charb[20];};mapstring,itemstructmymap.解答1:#includeiostream#includectime#includemapusingnamespacestd;typedefstructitemstruct{inta;charb[20];}itemS;itemSs[4]={{102,what},{33,hello},{198,world},{45,c++}};;intmain(){mapstring,itemSmymap;stringstr[4]={1st,2nd,3rd,4th};for(inti=0;i4;i++){mymap.insert(make_pair(str[i],s[i]));}mapstring,itemS::iteratorit;for(it=mymap.begin();it!=mymap.end();it++){if(it-second.a100){i=mymap.erase(it);-----正确mymap.erase(it);-----it失效..}}//first是Key,second是value;for(it=mymap.begin();it!=mymap.end();it++){coutit-firstit-second.ait-second.bendl;}system(pause);return0;}解答2:#includemap#includeiterator#includestring#includeiostream#includecstringusingnamespacestd;structitemstruct{inta;charb[20];itemstruct(intt,char*str){a=t;strcpy(b,str);}};intmain(){mapstring,itemstructmymap;mymap.insert(make_pair(a,itemstruct(10,hanzhou)));mymap.insert(make_pair(ab,itemstruct(20,fuzhou)));mymap.insert(make_pair(abc,itemstruct(30,zhengzhou)));mymap.insert(make_pair(abcd,itemstruct(200,wuhan)));mymap.insert(make_pair(abcde,itemstruct(150,kunming)));mymap.insert(make_pair(abcdef,itemstruct(50,xiamen)));mapstring,itemstruct::iteratorit=mymap.begin();while(it!=mymap.end()){if((it-second).a100)mymap.erase(it++);elseit++;}it=mymap.begin();while(it!=mymap.end()){coutit-first(it-second).a(it-second).bendl;it++;}system(PAUSE);return0;}解答3:for(mapstring,itemstruct::iteratori=mymap.begin();i!=mymap.end();){if(i-second.a100)i=mymap.erase(i);else++i;}解答4:VC6中编译map编译出错的解决方法Warningssimilartothefollowingaregeneratedevenifyouusethewarningpragmatodisablethewarning:warningC4786:'std::rb_treeCAiSpanningTreeState,std::lessState::TransClosureNode,CAiSpanningTreeState,std::lessState::TransClosureNode,std::identCaiSpanningTreeState,std::lessState::TransClosureNode,CAiSpanningTreeState,std::lessState::TransClosureNode,std::lessCAiSpanningTreeState,std::lessState::TransClosureNode':identifierwastruncatedto'255'charactersinthedebuginformationC++基础与教程【map型关联容器】(2010-11-0420:29:18)转载▼标签:容器类型对象map型it分类:Programme关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。两个基本的关联容器类型是mapset。map的元素以键-值(key-value)对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。set和map类型的对象所包含的元素都具有不同的键,不允许为同一个键添加第二个元素。如果一个键必须对应多个实例,则需使用multimap或multiset,这两种类型允许多个元素拥有相同的键。关联容器类型:map关联数组:元素通过键来存储和读取。set大小可变的集合,支持通过键实现的快速读取。multimap支持同一个键多次出现的map类型。multiset支持同一个键多次出现的set类型。pairs类型提供的操作:pairT1,T2p1;创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化。pairT1,T2p1(v1,v2);创建一个pair对象,它的两个元素分别是T1和T2,其中first成员初始化为v1,而second成员初始化为v2。。make_pair(v1,v2)以v1和v2值创建一个新pair对象,其元素类型分别是v1和v2的类型。p1p2两个pair对象之间的小于运算,其定义遵循字典次序:如果p1.firstp2.first或者!(p2.firstp1.first)&&p1.secondp2.second,则返回true。p1==p2如果两个pair对象的first和second成员依次相等,则这两个对象相等。p.first返回p中名为first的(公有)数据成员p.second返回p的名为second的(公有)数据成员初始化:pairstring,stringanon;//holdstwostringspairstring,intword_count;//holdsastringandanintpairstring,vectorintline;//holdsstringandvectorint可在定义时为每个成员提供初始化式:pairstring,stringauthor(James,Joyce);可考虑利用typedef简化其声明:typedefpairstring,stringAuthor;Authorproust(Marcel,Proust);Authorjoyce(James,Joyce);访问pairs数据成员:stringfirstBook;//accessandtestthedatamembersofthepairif(author.first==James&&author.second==Joyce)firstBook=StephenHero;make_pair函数:pairstring,stringnext_auth;stringfirst,last;while(cinfirstlast){//generateapairfromfirstandlastnext_auth=make_pair(first,last);//processnext_auth...}顺序容器和关联容器公共的操作包括下面的几种:前三种构造函数:CTc;//createsanemptycontainerCTc1(c2);//copieselementsfromc2intoc1//bandeareiteratorsdenotingasequenceCTc(b,e);//copieselementsfromthesequenceintoc关联容器不能通过容器大小来定义,因为这样的话就无法知道键所对应的值是什么。•关系运算:<,>,==,参考string类。•begin、end、rbegin和
本文标题:map的用法
链接地址:https://www.777doc.com/doc-3353536 .html