上海网站建设哪家好,做网站会很忙吗,东港区建设局网站,不会建网站目录1. map/ multimap容器1.1 map基本概念1.2 map构造和赋值1.3 map大小和交换1.4 map插入和删除1.5 map查找和统计1.6 map容器排序1.7 案例-员工分组1.7.1 案例描述1.7.2 实现步骤1. map/ multimap容器
1.1 map基本概念
简介#xff1a;
map中所有元素都是pairpair中第一个…
目录1. map/ multimap容器1.1 map基本概念1.2 map构造和赋值1.3 map大小和交换1.4 map插入和删除1.5 map查找和统计1.6 map容器排序1.7 案例-员工分组1.7.1 案例描述1.7.2 实现步骤1. map/ multimap容器
1.1 map基本概念
简介
map中所有元素都是pairpair中第一个元素为key键值起到索引作用第二个元素为value实值所有元素都会根据元素的键值自动排序
本质
map/multimap属于关联式容器底层结构是用二叉树实现。
优点
可以根据key值快速找到value值
map和multimap区别
map不允许容器中有重复key值元素multimap允许容器中有重复key值元素
1.2 map构造和赋值
功能描述
对map容器进行构造和赋值操作
函数原型
构造
mapT1, T2 mp; //map默认构造函数:map(const map mp); //拷贝构造函数
赋值
map operator(const map mp); //重载等号操作符
示例
#include mapvoid printMap(mapint,intm)
{for (mapint, int::iterator it m.begin(); it ! m.end(); it){cout key it-first value it-second endl;}cout endl;
}void test01()
{mapint,intm; //默认构造m.insert(pairint, int(1, 10));m.insert(pairint, int(2, 20));m.insert(pairint, int(3, 30));printMap(m);mapint, intm2(m); //拷贝构造printMap(m2);mapint, intm3;m3 m2; //赋值printMap(m3);
}int main() {test01();system(pause);return 0;
}总结map中所有元素都是成对出现插入数据时候要使用对组
1.3 map大小和交换
功能描述
统计map容器大小以及交换map容器
函数原型
size(); //返回容器中元素的数目empty(); //判断容器是否为空swap(st); //交换两个集合容器
示例
#include mapvoid printMap(mapint,intm)
{for (mapint, int::iterator it m.begin(); it ! m.end(); it){cout key it-first value it-second endl;}cout endl;
}void test01()
{mapint, intm;m.insert(pairint, int(1, 10));m.insert(pairint, int(2, 20));m.insert(pairint, int(3, 30));if (m.empty()){cout m为空 endl;}else{cout m不为空 endl;cout m的大小为 m.size() endl;}
}//交换
void test02()
{mapint, intm;m.insert(pairint, int(1, 10));m.insert(pairint, int(2, 20));m.insert(pairint, int(3, 30));mapint, intm2;m2.insert(pairint, int(4, 100));m2.insert(pairint, int(5, 200));m2.insert(pairint, int(6, 300));cout 交换前 endl;printMap(m);printMap(m2);cout 交换后 endl;m.swap(m2);printMap(m);printMap(m2);
}int main() {test01();test02();system(pause);return 0;
}总结
统计大小 — size判断是否为空 — empty交换容器 — swap
1.4 map插入和删除
功能描述
map容器进行插入数据和删除数据
函数原型
insert(elem); //在容器中插入元素。clear(); //清除所有元素erase(pos); //删除pos迭代器所指的元素返回下一个元素的迭代器。erase(beg, end); //删除区间[beg,end)的所有元素 返回下一个元素的迭代器。erase(key); //删除容器中值为key的元素。
示例
#include mapvoid printMap(mapint,intm)
{for (mapint, int::iterator it m.begin(); it ! m.end(); it){cout key it-first value it-second endl;}cout endl;
}void test01()
{//插入mapint, int m;//第一种插入方式m.insert(pairint, int(1, 10));//第二种插入方式m.insert(make_pair(2, 20));//第三种插入方式m.insert(mapint, int::value_type(3, 30));//第四种插入方式m[4] 40; printMap(m);//删除m.erase(m.begin());printMap(m);m.erase(3);printMap(m);//清空m.erase(m.begin(),m.end());m.clear();printMap(m);
}int main() {test01();system(pause);return 0;
}总结
map插入方式很多记住其一即可
插入 — insert删除 — erase清空 — clear
1.5 map查找和统计
功能描述
对map容器进行查找数据以及统计数据
函数原型
find(key); //查找key是否存在,若存在返回该键的元素的迭代器若不存在返回set.end();count(key); //统计key的元素个数
示例
#include map//查找和统计
void test01()
{mapint, intm; m.insert(pairint, int(1, 10));m.insert(pairint, int(2, 20));m.insert(pairint, int(3, 30));//查找mapint, int::iterator pos m.find(3);if (pos ! m.end()){cout 找到了元素 key (*pos).first value (*pos).second endl;}else{cout 未找到元素 endl;}//统计int num m.count(3);cout num num endl;
}int main() {test01();system(pause);return 0;
}总结
查找 — find 返回的是迭代器统计 — count 对于map结果为0或者1
1.6 map容器排序
学习目标
map容器默认排序规则为 按照key值进行 从小到大排序掌握如何改变排序规则
主要技术点:
利用仿函数可以改变排序规则
示例
#include mapclass MyCompare {
public:bool operator()(int v1, int v2) {return v1 v2;}
};void test01()
{//默认从小到大排序//利用仿函数实现从大到小排序mapint, int, MyCompare m;m.insert(make_pair(1, 10));m.insert(make_pair(2, 20));m.insert(make_pair(3, 30));m.insert(make_pair(4, 40));m.insert(make_pair(5, 50));for (mapint, int, MyCompare::iterator it m.begin(); it ! m.end(); it) {cout key: it-first value: it-second endl;}
}
int main() {test01();system(pause);return 0;
}总结
利用仿函数可以指定map容器的排序规则对于自定义数据类型map必须要指定排序规则,同set容器
1.7 案例-员工分组
1.7.1 案例描述
公司今天招聘了10个员工ABCDEFGHIJ10名员工进入公司之后需要指派员工在那个部门工作员工信息有: 姓名 工资组成部门分为策划、美术、研发随机给10名员工分配部门和工资通过multimap进行信息的插入 key(部门编号) value(员工)分部门显示员工信息
1.7.2 实现步骤
创建10名员工放到vector中遍历vector容器取出每个员工进行随机分组分组后将员工部门编号作为key具体员工作为value放入到multimap容器中分部门显示员工信息
案例代码
#includeiostream
using namespace std;
#include vector
#include string
#include map
#include ctime/*
- 公司今天招聘了10个员工ABCDEFGHIJ10名员工进入公司之后需要指派员工在那个部门工作
- 员工信息有: 姓名 工资组成部门分为策划、美术、研发
- 随机给10名员工分配部门和工资
- 通过multimap进行信息的插入 key(部门编号) value(员工)
- 分部门显示员工信息
*/#define CEHUA 0
#define MEISHU 1
#define YANFA 2class Worker
{
public:string m_Name;int m_Salary;
};void createWorker(vectorWorkerv)
{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(vectorWorkerv,multimapint,Workerm)
{for (vectorWorker::iterator it v.begin(); it ! v.end(); it){//产生随机部门编号int deptId rand() % 3; // 0 1 2 //将员工插入到分组中//key部门编号value具体员工m.insert(make_pair(deptId, *it));}
}void showWorkerByGourp(multimapint,Workerm)
{// 0 A B C 1 D E 2 F G ...cout 策划部门 endl;multimapint,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、创建员工vectorWorkervWorker;createWorker(vWorker);//2、员工分组multimapint, WorkermWorker;setGroup(vWorker, mWorker);//3、分组显示员工showWorkerByGourp(mWorker);测试//for (vectorWorker::iterator it vWorker.begin(); it ! vWorker.end(); it)//{// cout 姓名 it-m_Name 工资 it-m_Salary endl;//}system(pause);return 0;
}总结
当数据以键值对形式存在可以考虑用map 或 multimap 我的个人主页 欢迎各位→点赞 收藏⭐️ 留言 总结希望你看完之后能对你有所帮助不足请指正共同学习交流 ✉️今天你做别人不想做的事明天你就能做别人做不到的事♐ 文章转载自: http://www.morning.wyjhq.cn.gov.cn.wyjhq.cn http://www.morning.fqnql.cn.gov.cn.fqnql.cn http://www.morning.glbnc.cn.gov.cn.glbnc.cn http://www.morning.rdlong.com.gov.cn.rdlong.com http://www.morning.rbylq.cn.gov.cn.rbylq.cn http://www.morning.xtdms.com.gov.cn.xtdms.com http://www.morning.cfynn.cn.gov.cn.cfynn.cn http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn http://www.morning.dodoking.cn.gov.cn.dodoking.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.rythy.cn.gov.cn.rythy.cn http://www.morning.zbnts.cn.gov.cn.zbnts.cn http://www.morning.fnpyk.cn.gov.cn.fnpyk.cn http://www.morning.jxltk.cn.gov.cn.jxltk.cn http://www.morning.dbqg.cn.gov.cn.dbqg.cn http://www.morning.pdwzr.cn.gov.cn.pdwzr.cn http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.jrrqs.cn.gov.cn.jrrqs.cn http://www.morning.gslz.com.cn.gov.cn.gslz.com.cn http://www.morning.scjtr.cn.gov.cn.scjtr.cn http://www.morning.jzgxp.cn.gov.cn.jzgxp.cn http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn http://www.morning.phwmj.cn.gov.cn.phwmj.cn http://www.morning.tkxr.cn.gov.cn.tkxr.cn http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn http://www.morning.qxdrw.cn.gov.cn.qxdrw.cn http://www.morning.bbtn.cn.gov.cn.bbtn.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.ljxps.cn.gov.cn.ljxps.cn http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn http://www.morning.rshijie.com.gov.cn.rshijie.com http://www.morning.klzdy.cn.gov.cn.klzdy.cn http://www.morning.rzcfg.cn.gov.cn.rzcfg.cn http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn http://www.morning.xrqkm.cn.gov.cn.xrqkm.cn http://www.morning.jwbnm.cn.gov.cn.jwbnm.cn http://www.morning.rjrz.cn.gov.cn.rjrz.cn http://www.morning.pqxjq.cn.gov.cn.pqxjq.cn http://www.morning.rhdqz.cn.gov.cn.rhdqz.cn http://www.morning.lmfxq.cn.gov.cn.lmfxq.cn http://www.morning.rmxwm.cn.gov.cn.rmxwm.cn http://www.morning.nzqmw.cn.gov.cn.nzqmw.cn http://www.morning.prgnp.cn.gov.cn.prgnp.cn http://www.morning.mlnbd.cn.gov.cn.mlnbd.cn http://www.morning.xqxrm.cn.gov.cn.xqxrm.cn http://www.morning.sftpg.cn.gov.cn.sftpg.cn http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn http://www.morning.ncfky.cn.gov.cn.ncfky.cn http://www.morning.rwxnn.cn.gov.cn.rwxnn.cn http://www.morning.dbqg.cn.gov.cn.dbqg.cn http://www.morning.dnqlba.cn.gov.cn.dnqlba.cn http://www.morning.rywr.cn.gov.cn.rywr.cn http://www.morning.kyflr.cn.gov.cn.kyflr.cn http://www.morning.bwxph.cn.gov.cn.bwxph.cn http://www.morning.ylrxd.cn.gov.cn.ylrxd.cn http://www.morning.hxcuvg.cn.gov.cn.hxcuvg.cn http://www.morning.ktmpw.cn.gov.cn.ktmpw.cn http://www.morning.zmlbq.cn.gov.cn.zmlbq.cn http://www.morning.pjyrl.cn.gov.cn.pjyrl.cn http://www.morning.gtwtk.cn.gov.cn.gtwtk.cn http://www.morning.gyylt.cn.gov.cn.gyylt.cn http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn http://www.morning.lffbz.cn.gov.cn.lffbz.cn http://www.morning.qkqhr.cn.gov.cn.qkqhr.cn http://www.morning.bssjz.cn.gov.cn.bssjz.cn http://www.morning.zcmpk.cn.gov.cn.zcmpk.cn http://www.morning.kqylg.cn.gov.cn.kqylg.cn http://www.morning.hsgxj.cn.gov.cn.hsgxj.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.baohum.com.gov.cn.baohum.com http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn http://www.morning.nzmhk.cn.gov.cn.nzmhk.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.bhdtx.cn.gov.cn.bhdtx.cn http://www.morning.xbckm.cn.gov.cn.xbckm.cn http://www.morning.wnbqy.cn.gov.cn.wnbqy.cn