pre{
line-height:1;
color:#800080;
background-color:#d2c39b;
font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;}
.selfFuc{color:#0ed896;}
.bool{color:#d2576f;}
.condition{color:#000080;font-weight:bold;}
.key{color:#000080;}
.var{color:#008080;font-style:italic;}
.Digit{color:#ff00ff;font-weight:bold;}
.includePre{color:#800080;}
.operator?{color:#a776df;font-weight:bold;}
map?是一种关联容器,??提供一对一的关联,?关联的形式为:?KEY----VALUE?????关键字不重复。multimap与map类似,但是允许关键字重复 ??????????即:关键字和与之对应的值 ??????????????????关键字起到索引的作用,?在map中查找记录?就是根据关键字查找 ??????????????????关键字??和?值?可以是任意类型 ?????????????????map?也可看做是??关键字映射的集合,?即,map中不可出现重复的关键字,每条映射的关键字都是不同的。?????????? ?????????????????map?是基于红黑树结构的,其查找时间为LOG(N) ?如: ??????????????map<int,?int?>???????????????//第一个为关键字,第二个为此关键字所对应的值?????一个关键字只对应一个值,?是一对一的映射关系 ??????????????map<CString,int> ??????????????map<int,?CString> ??????????????map<CString,CString> ???????????????........
头文件
????#include?<map>?? ????using?namespace?std;??//必须加上??
1?插入元素?
?? ??1)??insert函数插入
????map<int,int>?idMap;?? ????idMap.insert(pair<int,int>(1,1));?? ????idMap.insert(map<int,int>::value_type(2,1));?? ???用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的 ? ??判断是否插入成功 ?
????map<int,int>?idMap;?? ????idMap.insert(pair<int,int>(1,1));?? ????idMap.insert(map<int,int>::value_type(2,1));?? ?????? ????pair<map<int,int>::iterator,bool>?InsertPair;?? ?????? ????InsertPair=idMap.insert?(pair<int,int>(1,1));?? ?????? ????if?(InsertPair.second==true)?? ????{?? ????????cout<<"insert?successfully";?? ????}else?? ????????cout<<"insert?failure";?? ??2?)数组插入方式
????map<int,int>?idMap;?? ????idMap[1]=2;?? ???用数组方式就不同了,它可以覆盖以前该关键字对应的值 ??但存在一个性能的问题。该方法会将每个插入值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。而用insert方法则可直接赋值为显示值。
2?判断是否存在
Returns?the?number?of?elements?in?a?map?whose?key?matches?a?parameter-specified?key. ? size_type?count( ???const?Key&?_Key )?const
1?if?the?map?contains?an?element?whose?sort?key?matches?the?parameter?key;?0?if?the?map?does?not?contain?an?element?with?a?matching?key.
????int?num=idMap.count(1);?? ????if?(num==0)?? ????{?? ????????cout<<"the?key?1?does?not?exist";?? ????}else{?? ????????cout<<"exist";?? ????}??
3?查找关键字
iterator?find( ???const?Key&?_Key ); const_iterator?find( ???const?Key&?_Key )?const;
????map<int,int>::iterator?it;?? ????it=idMap.find(2);?? ????if?(it==idMap.end())?? ????{?? ????????cout<<"can?not?find?2";?? ????}else{?? ????????int?first=it->first;?? ????????int?second=it->second;?? ????}?? ?扩展: ? iterator?lower_bound( ???const?Key&?_Key ); const_iterator?lower_bound( ???const?Key&?_Key )?const; Returns?an?iterator?to?the?first?element?in?a?map?with?a?key?value?that?is?equal?to?or?greater?than?that?of?a?specified?key.
第一个等于或大于Key的元素
? iterator?upper_bound( ???const?Key&?_Key ); const_iterator?upper_bound( ???const?Key&?_Key )?const; Returns?an?iterator?to?the?first?element?in?a?map?that?with?a?key?having?a?value?that?is?greater?than?that?of?a?specified?key.
第一个大于Key的元素
? pair?<const_iterator,?const_iterator>?equal_range?( ???const?Key&?_Key )?const; pair?<iterator,?iterator>?equal_range?( ???const?Key&?_Key ); ?????A?pair?of?iterators?such?that?the?first?is?the?lower_bound?of?the?key?and?the?second?is?the?upper_bound?of?the?key. ????Equal_range函数返回一个pair,pair里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明map中不出现这个关键字
????p2?=?m1.equal_range(?4?);?? ?????? ????//?If?no?match?is?found?for?the?key,?? ????//?both?elements?of?the?pair?return?end(?)?? ????if?(?(?p2.first?==?m1.end(?)?)?&&?(?p2.second?==?m1.end(?)?)?)?? ???????cout?<<?"The?map?m1?doesn‘t?have?an?element?"?? ????????????<<?"with?a?key?less?than?40."?<<?endl;?? ????else?? ???????cout?<<?"The?element?of?map?m1?with?a?key?>=?40?is:?"?? ????????????<<?p2.first?->?first?<<?"."?<<?endl;??
4?大小,包含多少个元素
Returns?the?number?of?elements?in?the?map. ? size_type?size(?)?const;
????int?nSize=idMap.size();??
5?遍历
前向迭代器
????map<int,int>::iterator?it;?? ????for?(it=idMap.begin?();it!=idMap.end();it++)?? ????{?? ????????cout<<it->first<<endl;?? ????????cout<<it->second<<endl;?? ????}??
反向迭代器
????map<int,int>::reverse_iterator?iter;?? ????for?(iter=idMap.rbegin?();iter!=idMap.rend?();iter++)?? ????{?? ????????cout<<iter->first<<endl;?? ????????cout<<iter->second<<endl;?? ????}??
6?删除
iterator?erase( ???iterator?_Where ); iterator?erase( ???iterator?_First, ???iterator?_Last ); size_type?erase( ???const?key_type&?_Key );
????//迭代器删除?? ????map<int,int>::iterator?it;?? ????it=idMap.find(1);?? ????idMap.erase(it);?? ?????? ????//关键字删除?? ????idMap.erase(1);?? ?????? ????//成片删除?或清空?? ????idMap.erase(idMap.begin?(),idMap.end());?? ?????? ????//清空?? ????idMap.clear?();??
7?基本函数
????C++?Maps是一种关联式容器,包含“关键字/值”对?? ????begin()??????????返回指向map头部的迭代器?? ????clear()?????????删除所有元素?? ????count()??????????返回指定元素出现的次数?? ????empty()??????????如果map为空则返回true?? ????end()????????????返回指向map末尾的迭代器?? ????equal_range()????返回特殊条目的迭代器对?? ????erase()??????????删除一个元素?? ????find()???????????查找一个元素?? ????get_allocator()??返回map的配置器?? ????insert()?????????插入元素?? ????key_comp()???????返回比较元素key的函数?? ????lower_bound()????返回键值>=给定元素的第一个位置?? ????max_size()???????返回可以容纳的最大元素个数?? ????rbegin()?????????返回一个指向map尾部的逆向迭代器?? ????rend()???????????返回一个指向map头部的逆向迭代器?? ????size()???????????返回map中元素的个数?? ????swap()????????????交换两个map?? ????upper_bound()?????返回键值>给定元素的第一个位置?? ????value_comp()??????返回比较元素value的函数??
示例:
????map<int,vector<int>>??m_DianmingMap;??
????AddDianmingMap(int?nXueqi,int?nXuehao)?? ????{?? ????????????????????????//将此学生添加到已点名容器中?? ?????? ????????????map<int,vector<int>>::iterator?it;?? ????????????it=m_DianmingMap.find(nXueqi);?? ????????????if?(it==m_DianmingMap.end?())?//先查找关键字有无此学期ID?? ????????????{?? ?????????????????//容器中不存在?则添加?? ????????????????vector<int>??int_Vec;?? ????????????????int_Vec.push_back(nXuehao);?? ?????? ????????????????m_DianmingMap[nXueqi]=int_Vec;?? ?????????????????? ?????? ????????????}else{//在查找?此学期中?有无此学号ID?? ?????? ????????????????vector<int>::iterator?itVec=find(it->second.begin?(),it->second.end(),m_nXuehaoID);?? ????????????????if(itVec==it->second.end())?? ????????????????{?? ????????????????????//没有此学生则添加?? ????????????????????it->second.push_back(nXuehao);?? ????????????????}?? ????????????}?? ?????? ????????????return?TRUE;?? ?????? ????}??
本文使用?书画小说软件?发布,内容与软件无关,书画小说软件?更惬意的读、更舒心的写、更轻松的发布。
时间: 2024-11-16 06:39:55