在map中插入自定义类对象

本文通过一个学生类的例子,介绍了在C++中如何在map中插入自定义类对象。当自定义类只有有参构造函数时,需要添加无参构造函数以避免编译错误。在插入过程中,会调用构造函数、复制构造函数、赋值函数和析构函数,详细解释了这一过程。最后展示了如何建立多层次映射,如班级与学生的关系。
摘要由CSDN通过智能技术生成

 点击查看原文

上一篇中讲到了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(){}

后运行正确。结果为

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值