• C++ STL 之 multimap案例之员工分组


    #include <iostream>
    #include <vector>
    #include <map>
    #include <string>
    #include <time.h>
    #include <stdlib.h>
    using namespace std;
    
    #define SALE_DEPATMENT 1 // 销售部门
    #define DEVELOP_DEPATMENT 2 // 研发部门
    #define FINACIAL_DEPATMENT 3 // 财务部门
    
    // multimap 案例
    // 公司今天招聘了 5 个员工, 5 名员工进入公司之后,需要指派员工在那个部门工作
    // 人员信息有: 姓名 年龄 电话 工资等组成
    // 通过 Multimap 进行信息的插入 保存 显示
    // 分部门显示员工信息 显示全部员工信息
    
    class Worker
    {
    public:
        string mName;
        string mTele;
        int mAge;
        int mSalary;
    };
    
    // 创建员工
    void Create_Worker(vector<Worker>& vWorker)
    {
        string seedName = "ABCDE";
        for (int i = 0; i < 5; i++)
        {
            Worker worker;
            worker.mName = "员工";
            worker.mName += seedName.at(i);
            worker.mAge = rand() % 10 + 20;
            worker.mTele = "010-88888888";
            worker.mSalary = rand() % 10000 + 10000;
            // 保存员工信息
            vWorker.push_back(worker);
        }
    }
    
    // 员工分组
    void WorkerByGroup(vector<Worker>& vWorker, multimap<int, Worker>& workeGroup)
    {
        // 把员工随机分配到不同部门
        srand(time(NULL));
        for (vector<Worker>::iterator it = vWorker.begin(); it != vWorker.end(); it++)
        {
            int departID = rand() % 3 + 1;
            switch (departID)
            {
            case SALE_DEPATMENT:
                workeGroup.insert(make_pair(SALE_DEPATMENT, *it));
                break;
            case DEVELOP_DEPATMENT:
                workeGroup.insert(make_pair(DEVELOP_DEPATMENT, *it));
                break;
            case FINACIAL_DEPATMENT:
                workeGroup.insert(make_pair(FINACIAL_DEPATMENT, *it));
                break;
            default:
                break;
            }
        }
    }
    
    void showGroupWorkers(multimap<int, Worker>& workerGroup, int departID)
    {
        // find(key);//查找键 key 是否存在,若存在,返回该键的元素的迭代器;/若不存在,返回 map.end();
        multimap<int, Worker>::iterator it = workerGroup.find(departID);
        // 找当前部门总人数
        // count(keyElem);//返回容器中 key 为 keyElem 的对组个数。对 map 来说,要么是 0,要么是 1。对multimap 来说,值可能大于 1。
        int Departcount = workerGroup.count(departID);
        int num = 0;
        for (multimap<int, Worker>::iterator pos = it; it != workerGroup.end() && num < Departcount; pos++, num++)
        {
            cout << "姓名:" << pos->second.mName << " 年龄:" << pos->second.mAge << " 电话:" << pos->second.mTele << " 工资:" << pos->second.mSalary << endl;
        }
    }
    
    // 打印每一部分员工信息
    void PrintWorkerByGroup(multimap<int, Worker>& workerGroup)
    {
        // 打印销售部门员工信息
        cout << "销售部门:" << endl;
        showGroupWorkers(workerGroup, SALE_DEPATMENT);
        // 打印研发部门员工信息
        cout << "研发部门:" << endl;
        showGroupWorkers(workerGroup, DEVELOP_DEPATMENT);
        // 打印财务部门员工信息
        cout << "财务部门:" << endl;
        showGroupWorkers(workerGroup, FINACIAL_DEPATMENT);
    }
    
    int main()
    {
        // 存放新员工信息
        vector<Worker> vWorker;
        // multimap保存分组信息
        multimap<int, Worker> workerGroup;
        // 创建员工
        Create_Worker(vWorker);
        // 员工分组
        WorkerByGroup(vWorker, workerGroup);
        // 打印员工信息
        PrintWorkerByGroup(workerGroup);
        getchar();
        return 0;
    }
  • 相关阅读:
    Java集合框架--List 遍历
    Java集合框架--List 类
    Leetcode 239 Sliding Window Maximum (指定滑动窗最大值) (滑动窗口)
    Vim配置
    子字符串模板 (双指针, 滑动窗口)
    Leetcode 76 Minimum Window Substring. (最小窗口子字符串) (滑动窗口, 双指针)
    Leetcode 3 Longest Substring Without Repeating Characters. (最长无重复字符子串) (滑动窗口, 双指针)
    一切从赞美开始
    Leetcode 10 regular expression matching (正则表达式匹配) (动态规划)
    Leetcode 5 Longest Palindromic Substring (最长回文子字符串)(动态规划)
  • 原文地址:https://www.cnblogs.com/duxie/p/10928122.html
Copyright © 2020-2023  润新知