1、map/multimap的简介
2、map/multimap对象的默认构造
map/multimap采用模板类实现,对象的默认构造形式:
map
multimap
如:
map
map
//其中T1,T2还可以用各种指针类型或自定义类型
3、map的插入与迭代器
假设 map
mapStu.insert( pair
mapStu.inset(make_pair(-1, “校长-1”));
mapStu.insert( map
mapStu[3] = “小刘";
mapStu[5] = “小王";
假设 map mapA;
pair< map::iterator, bool > pairResult = mapA.insert(pair(3,"小张")); //插入方式一
int iFirstFirst = (pairResult.first)->first; //iFirst == 3;
string strFirstSecond = (pairResult.first)->second; //strFirstSecond为"小张"
bool bSecond = pairResult.second; //bSecond == true;
mapA.insert(map::value_type(1,"小李")); //插入方式二
mapA[3] = "小刘"; //修改value
mapA[5] = "小王"; //插入方式三
string str1 = mapA[2]; //执行插入 string() 操作,返回的str1的字符串内容为空。
string str2 = mapA[3]; //取得value,str2为"小刘"
//迭代器遍历
for (map::iterator it=mapA.begin(); it!=mapA.end(); ++it)
{
pair pr = *it;
int iKey = pr.first;
string strValue = pr.second;
}
map.rbegin()与map.rend() 略。
4、map对象的拷贝构造与赋值
map(const map &mp); //拷贝构造函数
map& operator=(const map &mp); //重载等号操作符
map.swap(mp); //交换两个集合容器
例如:
map
mapA.insert(pair
mapA.insert(pair
mapA.insert(pair
mapA.insert(pair
map
map
mapC = mapA; //赋值
mapC[3] = "老张";
mapC.swap(mapA); //交换
5、map的大小
map
mapA.insert(pair
mapA.insert(pair
mapA.insert(pair
mapA.insert(pair
if (mapA.empty())
{
int iSize = mapA.size(); //iSize == 4
}
6、map的删除
map mapA;
mapA.insert(pair(3,"小张"));
mapA.insert(pair(1,"小杨"));
mapA.insert(pair(7,"小赵"));
mapA.insert(pair(5,"小王"));
//删除区间内的元素
map::iterator itBegin=mapA.begin();
++ itBegin;
++ itBegin;
map::iterator itEnd=mapA.end();
mapA.erase(itBegin,itEnd); //此时容器mapA包含按顺序的{1,"小杨"}{3,"小张"}两个元素。
mapA.insert(pair(7,"小赵"));
mapA.insert(pair(5,"小王"));
//删除容器中第一个元素
mapA.erase(mapA.begin()); //此时容器mapA包含了按顺序的{3,"小张"}{5,"小王"}{7,"小赵"}三个元素
//删除容器中key为5的元素
mapA.erase(5);
//删除mapA的所有元素
mapA.clear(); //容器为空
7、map的查找
map::iterator it=mapStu.find(3);
if(it == mapStu.end())
{
//没找到
}
else
{
//找到了
pair pairStu = *it;
int iID = pairStu.first; //或 int iID = it->first;
string strName = pairStu.second; //或 string strName = it->second;
}
例如: mapStu是用map it = mapStu.lower_bound(5); //it->first==5 it->second=="小王" it = mapStu.upper_bound(5); //it->first==7 it->second=="小赵" it = mapStu.lower_bound(6); //it->first==7 it->second=="小赵" it = mapStu.upper_bound(6); //it->first==7 it->second=="小赵"
|
以上函数返回两个迭代器,而这两个迭代器被封装在pair中。
例如 map ... //往mapStu容器插入元素{1,"小李"}{3,"小张"}{5,"小王"}{7,"小赵"}{9,"小陈"} pair< map map map //此时 itBeg->first==5 , itEnd->first == 7, itBeg->second=="小王", itEnd->second=="小赵"
|
Multimap 案例: //1个key值可以对应多个valude =è分组 //公司有销售部 sale (员工2名)、技术研发部 development (1人)、财务部 Financial (2人) //人员信息有:姓名,年龄,电话、工资等组成 //通过 multimap进行 信息的插入、保存、显示 //分部门显示员工信息
|
参考:传智扫地僧讲义