(1)构造函数
map(constPred&comp = Pred(),constA& al = A());创建空映射·map(constmap& x); 拷贝构造函数
map(constvalue_type*first, constvalue_type*last,constPred&comp = Pred(),constA& al = A());贝[first,last)之间元素构成
新映射。
multimap(constPred&comp = Pred(),constA& al = A());创建空映射
multimap(constmultimap&x); 拷贝构造函数
multimap(constvalue_type*first, constvalue_type*last, constPred&comp = Pred(),constA& al = A());拷
贝[first,last)之间元素构成新映射
(2)大小、判断空函数
intsize() const ;返回容器元素个数
boolempty() const ;判断容器是否空,若返回true,表明容器已空
(3)增加、删除函数
iterator insert(constvalue_type&x); 插入元素x
iterator insert(iteratorit, constvalue_type&x);在迭代指针it处插入元素x
void insert(constvalue_type*first, constvalue_type*last);插入[first,last)间元素
iterator erase(iteratorit); 删除迭代指针it处元素
iterator erase(iteratorfirst, iterator last); 删除[first,last)迭代指针间元素 size_typeerase(constKey& key); 删除键值等于key的元素
(4)遍历函数
iteratorbegin(); 返回首元素的迭带器指针
iteratorend(); 返回尾元素后的迭带器指针,而不是尾元素的迭带器指针
reverse_iteratorrbegin(); 返回尾元素的逆向迭带器指针,用于逆向遍历容器
reverse_iteratorrend(); 返回首元素前的逆向迭带器指针,用于逆向遍历容器
(5)操作函数
const_iteratorlower_bound(constKey& key);返回键值等于key迭代指针,否则返回end()
const_iteratorupper_bound(constKey& key);
intcount(constKey& key) const;返回容器中键值等于key的元素个数
pair<const_iterator,const_iterator>equal_range(constKey& key) const;返回容器中键值等于key的迭代指针[first,last)
const_iteratorfind(constKey& key) const;查找功能,返回键值等于key迭代器指针
voidswap(map&s); 交换单映射元素
voidswap(multimap&s); 交换多映射元素
(6)特殊函数
referenceoperator[](constKey& k);仅用在单映射map类中,可以以数组的形式给映射添加键---值对,并可返回值的引用。
#include<iostream>
#include <string>
#include <map>
using namespace std;
void Display(map<int,string>&m)
{
map<int,string>::iterator te=m.begin();
while (te!=m.end())
{
cout<<(*te).first<<"\t"<<(*te).second<<endl;
te++;
}
}
int main()
{
map<int,string>mymap;
pair<int,string>s1(1,"张三");
pair<int,string>s2(3,"张思");
pair<int,string>s3(6,"爱迪生");
pair<int,string>s4(5,"阿道夫");
pair<int,string>s5(1,"位飞");
mymap.insert(s1);
mymap.insert(s2);
mymap.insert(s3);
mymap.insert(s4);
mymap.insert(s5);
cout<<"通过insert函数创建:"<<endl;
Display(mymap);
cout<<endl;
cout<<"通过复制构造函数创建:"<<endl;
map<int,string>mymap2(mymap);
Display(mymap2);
return 0;
}
单映射map中operator[]用法。
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
map<string,string>mymap;
mymap["1-1"]="元旦";
mymap["5-1"]="五一国际劳动节";
mymap["7-1"]="党的生日";
mymap["8-1"]="建军节";
string s=mymap["1-1"];
if(s.size()>0)
{
cout<<"1-1是:"<<s<<endl;
}
else
{
cout<<"6-1没有登记"<<endl;
}
s=mymap["6-1"];
if(s.size()>0)
{
cout<<"6-1是:"<<s<<endl;
}
else
{
cout<<"6-1没有登记"<<endl;
}
return 0;
}
假设公司雇员属性有:雇员姓名(没有重复的姓名)、部门名称。编制管理雇员的集合类,仅包含:(1)添加雇员功能;(2)显示功能,要求按部门名称升序排列,若部门名相同,则姓名按升序排列。
分析:应该利用集合类,在添加雇员时,直接完成先按部门升序排列,再按姓名升序排列,即在恰当的位置重载operator<运算符,完成自定义排序规则功能。由于一个部门可以有许多雇员,因此应当采用multiset类。设雇员基本类为CEmployee,雇员集合类为CManage。则代码如下所示#include <iostream>
#include <string>
#include <set>
using namespace std;
class CEmployee
{
private:
string name;
string departname;
public:
CEmployee(string na,string depart):name(na),departname(depart){}
bool operator<(const CEmployee &e)const
{
bool mark=(departname.compare(e.departname)<0)? true:false;
if(departname.compare(e.departname)==0)
{
mark=(name.compare(e.name)<0)?true:false;
}
return mark;
}
string GetName()
{
return name;
}
string GetDepart()
{
return departname;
}
};
class CMange
{
multiset<CEmployee>myset;
public:
bool Add(CEmployee &e)
{
myset.insert(e);
return true;
}
void show()
{
multiset<CEmployee>::iterator te=myset.begin();
while (te!=myset.end())
{
CEmployee obj=*te;
cout<<obj.GetName()<<"\t\t"<<obj.GetDepart()<<endl;
te++;
}
}
};
int main()
{
CEmployee e1("爱的","大厦");
CEmployee e2("爱的的","奥迪");
CEmployee e3("啊","爱疯");
CEmployee e4("地方","阿斯顿");
CEmployee e5("阿道夫","地方");
CEmployee e6("恩恩","的");
CMange mange;
mange.Add(e1);
mange.Add(e2);
mange.Add(e3);
mange.Add(e4);
mange.Add(e5);
mange.Add(e6);
mange.show();
return 0;
}