上一篇中讲到了map(在头文件<map>中)和set(在头文件<set>中)的高效,但如果不需要对容器中的元素进行排序或建立映射,那么用vector就足够了,而且它的实现更简单。下面以一个简单的例子介绍一下如何灵活的运用map。
假设一个学生有名字和性别两个属性,对应一个编号。那么学生类定义如下:
class student
{
private:
string name;
char gender;
public:
student(string n,char g):name(n),gender(g){} //初始化列表使属性一次性赋值完毕,否则需要两次
friend ostream& operator<<(ostream& cout,student &s); //定义为friend便可拥有访问private属性的权限
};
ostream& operator<<(ostream& cout,student &s)
{
cout<<s.name<<" "<<s.gender;
return cout;
}
在写主函数
int main()
{
map<string,student> sm;
student ts("lishuai",'M');
sm[“001”] = ts;//检索key=”001”的值,如果存在,用ts覆盖,如果不存在,插入ts
for(map<string,student>::iterator it = sm.begin();it!=sm.end();it++)
{
cout<<(*it).second<<endl;调用operaotr<<重载函数打印student对象
}
system("pause");
return 0;
}
运行报了一堆错:后来发现最根本问题是无法找到student()无参构造函数。于是在类中添加构造函数
student(){}
后运行正确。结果为