• STLmultimap


    1 案例描述

    • 公司今天招聘了10个员工(A、B、C、D、E、F、G、H、I、J),10名员工进入公司之后,需要指派员工在哪个部门工作;
    • 员工信息有:姓名、工资组成;部门分为:策划、美术、研发;
    • 随机给10名员工分配部门和工资;
    • 通过multimap进行信息的插入key(部门编号)和value(员工);
    • 分部门显示员工信息。

    2 实现步骤

    1. 创建10名员工,放到vector中;
    2. 遍历vector容器,取出每个员工,进行随机分组;
    3. 分组后,将员工部门编号作为key,具体员工作为value,放入到multimap容器中;
    4. 分部门显示员工信息。
    #include<iostream>
    using namespace std;
    #include<vector>
    #include<string>
    #include<map>
    #include<ctime>
    
    /*
    - 公司今天招聘了10个员工(A、B、C、D、E、F、G、H、I、J),10名员工进入公司之后,需要指派员工在哪个部门工作;
    - 员工信息有:姓名、工资组成;部门分为:策划、美术、研发;
    - 随机给10名员工分配部门和工资;
    - 通过multimap进行信息的插入key(部门编号)和value(员工);
    - 分部门显示员工信息。
    */
    
    //宏定义
    #define CEHUA 0
    #define MEISHU 1
    #define YANFA 2
    
    //员工类
    class Worker
    {
    public:
      string m_Name;
      int m_Salary;
    };
    
    //创建员工
    void createWorker(vector<Worker>&v)
    {
      string nameSeed = "ABCDEFGHIJ";
      for (int i = 0; i < 10; i++)
      {
        Worker worker;
        worker.m_Name = "员工";
        worker.m_Name += nameSeed[i];
    
        worker.m_Salary = rand() % 10000 + 10000;  //10000~19999
    
        //将员工放入容器中
        v.push_back(worker);
      }
    }
    
    //员工分组
    void setGroup(vector<Worker>&v, multimap<int, Worker>&m)
    {
      for (vector<Worker>::iterator it = v.begin(); it != v.end(); it++)
      {
        //产生随机部门编号
        int deptId = rand() % 3;  //0 1 2
    
        //将员工插入到分组中:key为部门编号、value为具体员工
        m.insert(make_pair(deptId, *it));
      }
    }
    
    //分组显示员工
    void showWorkerByGroup(multimap<int, Worker>&m)
    {
      cout << "策划部门:" << endl;
      multimap<int, Worker>::iterator pos = m.find(CEHUA);
      int count = m.count(CEHUA);  //统计策划部门具体人数
      int index = 0;
      for (; pos != m.end() && index < count; pos++, index++)
      {
        cout << "姓名:" << pos->second.m_Name << "    工资:" << pos->second.m_Salary << endl;
      }
    
      cout << "-----------------------------" << endl;
    
      cout << "美术部门:" << endl;
      pos = m.find(MEISHU);
      count = m.count(MEISHU);  //统计策划部门具体人数
      index = 0;
      for (; pos != m.end() && index < count; pos++, index++)
      {
        cout << "姓名:" << pos->second.m_Name << "    工资:" << pos->second.m_Salary << endl;
      }
    
      cout << "-----------------------------" << endl;
    
      cout << "研发部门:" << endl;
      pos = m.find(YANFA);
      count = m.count(YANFA);  //统计策划部门具体人数
      index = 0;
      for (; pos != m.end() && index < count; pos++, index++)
      {
        cout << "姓名:" << pos->second.m_Name << "    工资:" << pos->second.m_Salary << endl;
      }
    }
    
    int main()
    {
      srand((unsigned int)time(NULL));
    
      //1. 创建员工
      vector<Worker>vWorker;
      createWorker(vWorker);
    
      //测试
      //for (vector<Worker>::iterator it = vWorker.begin(); it != vWorker.end(); it++)
      //{
      //  cout << "姓名:" << it->m_Name << "    工资:" << it->m_Salary << endl;
      //}
    
      //2. 员工分组
      multimap<int, Worker>mWorker;
      setGroup(vWorker,mWorker);
    
      //3. 分组显示员工
      showWorkerByGroup(mWorker);
    
      system("pause");
    
      return 0;
    }

    结果

    参考 https://blog.51cto.com/u_15178976/2787826

    https://blog.csdn.net/qq_30372933/article/details/105114747

    https://www.cnblogs.com/duxie/p/10928122.html

  • 相关阅读:
    深入理解浏览器的缓存机制
    【ES6】Set、Map、WeakSet 和 WeakMap 的区别
    js的防抖(debounce) 和 节流(throttling)
    git对比两个分支的差异——git checkout
    纯CSS实现可自定义间距虚线边框
    无语,非也
    Spring AOP
    Spring集成Junit
    Spring注解开发-新注解
    Spring注解开发-原始注解
  • 原文地址:https://www.cnblogs.com/Malphite/p/15781250.html
Copyright © 2020-2023  润新知