首页 > 代码库 > map使用.xml

map使用.xml

<style type="text/css"> 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;} </style>

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;??
??????
????}??

本文使用?书画小说软件?发布,内容与软件无关,书画小说软件?更惬意的读、更舒心的写、更轻松的发布。

map使用.xml