C++STL实验之map容器的应用

实验目的:

1.了解map的实现原理

2.熟练掌握map的基本操作

实验器材:

C++

实验内容:

按照部门名称对职工进行查找

实验步骤:

#include<iostream>

#include<map>

using namespace std;

//按照部门查询人员信息

/*

    人事部 张三 20

    销售部 李四 22

    人事部 王五 23

    销售部 赵六 25

    销售部 钱七 26

输出:

    销售部

        李四 22

        赵六 25

        钱七 26

*/

class Person

{

    string name;

    int age;

public:

    Person(string n,int a){name=n;age=a;}

    void show(){cout<<name<<" "<<age<<endl;}

};

class Manage

{

    multimap<string,Person> m;

public:

    Manage(pair<string,Person> *fir,pair<string,Person> *las)

    :m(fir,las){}

    void disp()

    {

        multimap<string,Person>::iterator i=m.begin();

        for(;i!=m.end();i++)

        {

            cout<<(*i).first<<" ";

            (*i).second.show();

        }

    }

    void select(string bumen)

    {

/*1、容器遍历

  2、equal_range

  3、find+count

*/

        pair<multimap<string,Person>::iterator,

            multimap<string,Person>::iterator> p;

        p=m.equal_range(bumen);//返回值是pair

        multimap<string,Person>::iterator Beg=p.first,End=p.second;

        cout<<(*Beg).first<<endl;

        for(;Beg!=End;Beg++)

        {

            cout<<"     ";

            (*Beg).second.show();

        }

    }

};

int main()

{

    Person p1("张三",20),p2("李四",22),p3("王五",24),p4("赵六",23),p5("钱七",25);

    pair<string,Person> p[]={make_pair("人事部",p1),

                             make_pair("销售部",p2),

                             make_pair("人事部",p3),

                             make_pair("销售部",p4),

                             make_pair("销售部",p5)};

    Manage mg(p,p+5);

    mg.disp();

    cout<<endl;

    mg.select("销售部");

    return 0;

}

实验结果(附数据和图表):

B4jYF629dvjDAAAAAElFTkSuQmCC

实验结果分析及结论:

实验成功,成功给multimap容器赋值,并且用equal_range函数查询出了销售部的员工信息。

要注意equal_range函数的返回值是pair,map容器本身也是pair。

实验心得体会和建议:

映射  map(一对一)、multimap(一对多),由pair构成的红黑树(key)同时通过pair访问元素。map默认生序排列,原因采用了less<T>排序

[key]:返回值是value,当key存在,输出对应的value,key不存在,输出对应数据类型的默认值,并且自动添加到容器中

实验评价及结论:

实验指导老师签字:                                      年   月  日

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LucianaiB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值