讲解要点
容器map/multimap的使用方法
map/multimap的简介
map/multimap对象的默认构造
map/multimap采用模板类实现,对象的默认构造形式:
map<T1,T2> mapTT;
multimap<T1,T2> multimapTT;
如:
map<int, char> mapA;
map<string,float> mapB;
//其中T1,T2还可以用各种指针类型或自定义类型
map的插入与迭代器
map<int, string> mapA;
pair<map<int,string>::iterator, bool > pairResult =mapA.insert(pair<int,string>(3,"小张")); //插入方式一
intiFirstFirst = (pairResult.first)->first; //iFirst== 3;
stringstrFirstSecond = (pairResult.first)->second; //strFirstSecond为"小张"
boolbSecond = pairResult.second; //bSecond== true;
mapA.insert(map<int,string>::value_type(1,"小李")); //插入方式二
mapA[3]= "小刘"; //修改value
mapA[5]= "小王"; //插入方式三
stringstr1 = mapA[2]; //执行插入 string() 操作,返回的str1的字符串内容为空。
stringstr2 = mapA[3]; //取得value,str2为"小刘"
//迭代器遍历
for(map<int,string>::iterator it=mapA.begin(); it!=mapA.end(); ++it)
{
pair<int,string> pr = *it;
intiKey = pr.first;
stringstrValue = pr.second;
}
map.rbegin()与map.rend() 略。
map对象的拷贝构造与赋值
map<int,string> mapA;
mapA.insert(pair<int,string>(3,"小张"));
mapA.insert(pair<int,string>(1,"小杨"));
mapA.insert(pair<int,string>(7,"小赵"));
mapA.insert(pair<int,string>(5,"小王"));
map<int,string> mapB(mapA); //拷贝构造
map<int,string> mapC;
mapC= mapA; //赋值
mapC[3]= "老张";
mapC.swap(mapA); //交换
map的大小
map<int,string> mapA;
mapA.insert(pair<int,string>(3,"小张"));
mapA.insert(pair<int,string>(1,"小杨"));
mapA.insert(pair<int,string>(7,"小赵"));
mapA.insert(pair<int,string>(5,"小王"));
if(mapA.empty())
{
intiSize = mapA.size(); //iSize == 4
}
map的删除
map<int, string> mapA;
mapA.insert(pair<int,string>(3,"小张"));
mapA.insert(pair<int,string>(1,"小杨"));
mapA.insert(pair<int,string>(7,"小赵"));
mapA.insert(pair<int,string>(5,"小王"));
//删除区间内的元素
map<int,string>::iteratoritBegin=mapA.begin();
++itBegin;
++itBegin;
map<int,string>::iteratoritEnd=mapA.end();
mapA.erase(itBegin,itEnd); //此时容器mapA包含按顺序的{1,"小杨"}{3,"小张"}两个元素。
mapA.insert(pair<int,string>(7,"小赵"));
mapA.insert(pair<int,string>(5,"小王"));
//删除容器中第一个元素
mapA.erase(mapA.begin()); //此时容器mapA包含了按顺序的{3,"小张"}{5,"小王"}{7,"小赵"}三个元素
//删除容器中key为5的元素
mapA.erase(5);
//删除mapA的所有元素
mapA.clear(); //容器为空
map的查找
map<int, string> mapA;
mapA.insert(pair<int,string>(3,"小张"));
mapA.insert(pair<int,string>(1,"小杨"));
mapA.insert(pair<int,string>(7,"小赵"));
mapA.insert(pair<int,string>(5,"小王"));
//find方法
map<int,string>::iterator it1 = mapA.find(5); //it1指向{5,"小王"}元素
intiCount = mapA.count(5); //iCount== 1
//lower_bound方法
map<int,string>::iterator it2 = mapA.lower_bound(5); //it2指向{5,"小王"}元素
//upper_bound方法
map<int,string>::iterator it3 = mapA.upper_bound(5); //it3指向{7,"小赵"}元素
//equal_range方法
pair<map<int,string>::iterator, map<int,string>::iterator > pr =mapA.equal_range(5);
map<int,string>::iterator it4 = pr.first; //it4指向{5,"小王"}元素
map<int,string>::iterator it5 = pr.second; //it5指向{7,"小赵"}元素
struct userdevice{
string m_devicename;
long m_deviceid;
int m_devicePopedom;
};
typedef multimap<string,userdevice> USERTABLE;
typedef USERTABLE::const_iterator CIT;
typedef pair<CIT, CIT> Range;
CIT it;
userdeviced1,d2,d3,d4;
d1.m_deviceid= 12341234;
d1.m_devicename= "d1";
d1.m_devicePopedom= 123;
d2.m_deviceid= 23622344;
d2.m_devicename= "d2";
d2.m_devicePopedom= 234;
d3.m_deviceid= 3451234;
d3.m_devicename= "d3";
d3.m_devicePopedom= 345;
d4.m_deviceid= 43622344;
d4.m_devicename= "d4";
d4.m_devicePopedom= 456;
USERTABLEm_user;
m_user.insert(make_pair("zhangsanfeng",d1));
m_user.insert(make_pair("zhangsanfeng",d2));
m_user.insert(make_pair("zhangsanfeng2",d3));
m_user.insert(make_pair("zhangsanfeng2",d4));
//查找方法一
Rangerange=m_user.equal_range("zhangsanfeng");
for(CIT i = range.first;i!=range.second;i++)
{
cout<< i->second.m_deviceid<<','
<<i->second.m_devicename.c_str()<<','
<<i->second.m_devicePopedom
<<endl;
}
cout<<endl;
//查找方法二
CITit2 = m_user.find("zhangsanfeng2");
while(it2 != m_user.end())
{
cout<<it2->second.m_deviceid<<','
<<it2->second.m_devicename.c_str()<<','
<<it2->second.m_devicePopedom<<','
<<endl;
it2++;
}
cout<<endl;
//遍历
CITit3 = m_user.begin();
while(it3 != m_user.end())
{
cout<<it3->second.m_deviceid<<','
<<it3->second.m_devicename.c_str()<<','
<<it3->second.m_devicePopedom<<','
<<endl;
it3++;
}