外贸网站建设 公司价格最好的购物网站
web/
2025/10/3 2:40:26/
文章来源:
外贸网站建设 公司价格,最好的购物网站,宁波企业网站搭建极速建站,商务网站规划与建设本专栏记录C学习过程包括C基础以及数据结构和算法#xff0c;其中第一部分计划时间一个月#xff0c;主要跟着黑马视频教程#xff0c;学习路线如下#xff0c;不定时更新#xff0c;欢迎关注。 当前章节处于#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战… 本专栏记录C学习过程包括C基础以及数据结构和算法其中第一部分计划时间一个月主要跟着黑马视频教程学习路线如下不定时更新欢迎关注。 当前章节处于 ---------第1阶段-C基础入门 ---------第2阶段实战-通讯录管理系统 ---------第3阶段-C核心编程 ---------第4阶段实战-基于多态的企业职工系统 第5阶段-C提高编程 ---------第6阶段实战-基于STL泛化编程的演讲比赛 ---------第7阶段-C实战项目机房预约管理系统 文章目录 一、 list容器1.1 list基本概念1.2 list构造函数1.3 list 赋值和交换1.4 list 大小操作1.5 list 插入和删除1.6 list 数据存取1.7 list 反转和排序 二、set/ multiset 容器2.1 set基本概念2.2 set构造和赋值2.3 set大小和交换2.4 set插入和删除2.5 set查找和统计2.6 set和multiset区别2.7 pair对组创建2.8 set容器排序 三、 map/ multimap容器3.1 map基本概念3.2 map构造和赋值3.3 map大小和交换3.4 map插入和删除3.5 map查找和统计3.6 map容器排序 一、 list容器
1.1 list基本概念
功能将数据进行链式存储
链表list是一种物理存储单元上非连续的存储结构数据元素的逻辑顺序是通过链表中的指针链接实现的
链表的组成链表由一系列结点组成
结点的组成一个是存储数据元素的数据域另一个是存储下一个结点地址的指针域
STL中的链表是一个双向循环链表
由于链表的存储方式并不是连续的内存空间因此链表list中的迭代器只支持前移和后移属于双向迭代器
list的优点
采用动态存储分配不会造成内存浪费和溢出链表执行插入和删除操作十分方便修改指针即可不需要移动大量元素
list的缺点
链表灵活但是空间(指针域) 和 时间遍历额外耗费较大
List有一个重要的性质插入操作和删除操作都不会造成原有list迭代器的失效这在vector是不成立的。
总结STL中List和vector是两个最常被使用的容器各有优缺点
1.2 list构造函数
功能描述
创建list容器
函数原型
listT lst; //list采用采用模板类实现,对象的默认构造形式list(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。list(n,elem); //构造函数将n个elem拷贝给本身。list(const list lst); //拷贝构造函数。
示例
#include listvoid printList(const listint L) {for (listint::const_iterator it L.begin(); it ! L.end(); it) {cout *it ;}cout endl;
}void test01()
{listintL1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);printList(L1);listintL2(L1.begin(),L1.end());printList(L2);listintL3(L2);printList(L3);listintL4(10, 1000);printList(L4);
}int main() {test01();system(pause);return 0;
}
10 20 30 40
10 20 30 40
10 20 30 40
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
请按任意键继续. . .总结list构造方式同其他几个STL常用容器熟练掌握即可
1.3 list 赋值和交换
功能描述
给list容器进行赋值以及交换list容器
函数原型
assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。assign(n, elem); //将n个elem拷贝赋值给本身。list operator(const list lst); //重载等号操作符swap(lst); //将lst与本身的元素互换。
示例
#include listvoid printList(const listint L) {for (listint::const_iterator it L.begin(); it ! L.end(); it) {cout *it ;}cout endl;
}//赋值和交换
void test01()
{listintL1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);printList(L1);//赋值listintL2;L2 L1;printList(L2);listintL3;L3.assign(L2.begin(), L2.end());printList(L3);listintL4;L4.assign(10, 100);printList(L4);}//交换
void test02()
{listintL1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);listintL2;L2.assign(10, 100);cout 交换前 endl;printList(L1);printList(L2);cout endl;L1.swap(L2);cout 交换后 endl;printList(L1);printList(L2);}int main() {//test01();test02();system(pause);return 0;
}
交换前
10 20 30 40
100 100 100 100 100 100 100 100 100 100交换后
100 100 100 100 100 100 100 100 100 100
10 20 30 40
请按任意键继续. . .总结list赋值和交换操作能够灵活运用即可
1.4 list 大小操作
功能描述
对list容器的大小进行操作
函数原型 size(); //返回容器中元素的个数 empty(); //判断容器是否为空 resize(num); //重新指定容器的长度为num若容器变长则以默认值填充新位置。 //如果容器变短则末尾超出容器长度的元素被删除。 resize(num, elem); //重新指定容器的长度为num若容器变长则以elem值填充新位置。 //如果容器变短则末尾超出容器长度的元素被删除。示例
#include listvoid printList(const listint L) {for (listint::const_iterator it L.begin(); it ! L.end(); it) {cout *it ;}cout endl;
}//大小操作
void test01()
{listintL1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);if (L1.empty()){cout L1为空 endl;}else{cout L1不为空 endl;cout L1的大小为 L1.size() endl;}//重新指定大小L1.resize(10);printList(L1);L1.resize(2);printList(L1);
}int main() {test01();system(pause);return 0;
}
L1不为空
L1的大小为 4
10 20 30 40 0 0 0 0 0 0
10 20
请按任意键继续. . .总结
判断是否为空 — empty返回元素个数 — size重新指定个数 — resize
1.5 list 插入和删除
功能描述
对list容器进行数据的插入和删除
函数原型
push_back(elem);//在容器尾部加入一个元素pop_back();//删除容器中最后一个元素push_front(elem);//在容器开头插入一个元素pop_front();//从容器开头移除第一个元素insert(pos,elem);//在pos位置插elem元素的拷贝返回新数据的位置。insert(pos,n,elem);//在pos位置插入n个elem数据无返回值。insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据无返回值。clear();//移除容器的所有数据erase(beg,end);//删除[beg,end)区间的数据返回下一个数据的位置。erase(pos);//删除pos位置的数据返回下一个数据的位置。remove(elem);//删除容器中所有与elem值匹配的元素。
示例
#include listvoid printList(const listint L) {for (listint::const_iterator it L.begin(); it ! L.end(); it) {cout *it ;}cout endl;
}//插入和删除
void test01()
{listint L;//尾插L.push_back(10);L.push_back(20);L.push_back(30);//头插L.push_front(100);L.push_front(200);L.push_front(300);printList(L);//尾删L.pop_back();printList(L);//头删L.pop_front();printList(L);//插入listint::iterator it L.begin();L.insert(it, 1000);printList(L);//删除it L.begin();L.erase(it);printList(L);//移除L.push_back(10000);L.push_back(10000);L.push_back(10000);printList(L);L.remove(10000);printList(L);//清空L.clear();printList(L);
}int main() {test01();system(pause);return 0;
}
300 200 100 10 20 30
300 200 100 10 20
200 100 10 20
200 1000 100 10 20
200 100 10 20
200 100 10 20 10000 10000 10000
200 100 10 20请按任意键继续. . .总结
尾插 — push_back尾删 — pop_back头插 — push_front头删 — pop_front插入 — insert删除 — erase移除 — remove清空 — clear
1.6 list 数据存取
功能描述
对list容器中数据进行存取
函数原型
front(); //返回第一个元素。back(); //返回最后一个元素。
示例
#include list//数据存取
void test01()
{listintL1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//cout L1.at(0) endl;//错误 不支持at访问数据//cout L1[0] endl; //错误 不支持[]方式访问数据cout 第一个元素为 L1.front() endl;cout 最后一个元素为 L1.back() endl;//list容器的迭代器是双向迭代器不支持随机访问listint::iterator it L1.begin();//it it 1;//错误不可以跳跃访问即使是1
}int main() {test01();system(pause);return 0;
}
第一个元素为 10
最后一个元素为 40
请按任意键继续. . .总结
list容器中不可以通过[]或者at方式访问数据返回第一个元素 — front返回最后一个元素 — back
1.7 list 反转和排序
功能描述
将容器中的元素反转以及将容器中的数据进行排序
函数原型
reverse(); //反转链表sort(); //链表排序
示例
void printList(const listint L) {for (listint::const_iterator it L.begin(); it ! L.end(); it) {cout *it ;}cout endl;
}bool myCompare(int val1 , int val2)
{return val1 val2;
}//反转和排序
void test01()
{listint L;L.push_back(90);L.push_back(30);L.push_back(20);L.push_back(70);printList(L);//反转容器的元素L.reverse();printList(L);//排序L.sort(); //默认的排序规则 从小到大printList(L);L.sort(myCompare); //指定规则从大到小printList(L);
}int main() {test01();system(pause);return 0;
}
90 30 20 70
70 20 30 90
20 30 70 90
90 70 30 20
请按任意键继续. . .总结
反转 — reverse排序 — sort 成员函数
排序案例
案例描述将Person自定义数据类型进行排序Person中属性有姓名、年龄、身高
排序规则按照年龄进行升序如果年龄相同按照身高进行降序
#include iostream
using namespace std;
#includelist
// 创建Person类
class Person {
public:Person(string name, int age,int hight) {this-m_name name;this-m_age age;this-m_hight hight;}string m_name;int m_age;int m_hight;
};
// 输出信息
void printdata(const listPerson lt) {for (listPerson::const_iterator it lt.begin(); it ! lt.end(); it) {cout 姓名 (*it).m_name 年龄 (*it).m_age 身高 (*it).m_hight endl;}
}bool mycompare(Person p1, Person p2) {if (p1.m_age p2.m_age) {return p1.m_hight p2.m_hight;}return p1.m_age p2.m_age;
}int main() {// 创建Person对象Person p1(刘备, 35, 175);Person p2(曹操, 45, 180);Person p3(孙权, 40, 170);Person p4(赵云, 25, 190);Person p5(张飞, 35, 160);Person p6(关羽, 35, 200);// 创建list容器listPerson lt;lt.push_front(p1);lt.push_front(p2);lt.push_front(p3);lt.push_front(p4);lt.push_front(p5);lt.push_front(p6);lt.sort(mycompare);printdata(lt);system(pause);return 0;}姓名赵云 年龄25 身高190
姓名关羽 年龄35 身高200
姓名刘备 年龄35 身高175
姓名张飞 年龄35 身高160
姓名孙权 年龄40 身高170
姓名曹操 年龄45 身高180
请按任意键继续. . .总结 对于自定义数据类型必须要指定排序规则否则编译器不知道如何进行排序 高级排序只是在排序规则上再进行一次逻辑规则制定并不复杂
二、set/ multiset 容器
2.1 set基本概念
简介
所有元素都会在插入时自动被排序
本质
set/multiset属于关联式容器底层结构是用二叉树实现。
set和multiset区别
set不允许容器中有重复的元素multiset允许容器中有重复的元素
2.2 set构造和赋值
功能描述创建set容器以及赋值
构造
setT st; //默认构造函数set(const set st); //拷贝构造函数
赋值
set operator(const set st); //重载等号操作符
示例
#include setvoid printSet(setint s)
{for (setint::iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}//构造和赋值
void test01()
{setint s1;s1.insert(10);s1.insert(30);s1.insert(20);s1.insert(40);printSet(s1);//拷贝构造setints2(s1);printSet(s2);//赋值setints3;s3 s2;printSet(s3);
}int main() {test01();system(pause);return 0;
}
10 20 30 40
10 20 30 40
10 20 30 40
请按任意键继续. . .总结
set容器插入数据时用insertset容器插入数据的数据会自动排序
2.3 set大小和交换
功能描述
统计set容器大小以及交换set容器
函数原型
size(); //返回容器中元素的数目empty(); //判断容器是否为空swap(st); //交换两个集合容器
示例
#include setvoid printSet(setint s)
{for (setint::iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}//大小
void test01()
{setint s1;s1.insert(10);s1.insert(30);s1.insert(20);s1.insert(40);if (s1.empty()){cout s1为空 endl;}else{cout s1不为空 endl;cout s1的大小为 s1.size() endl;}}//交换
void test02()
{setint s1;s1.insert(10);s1.insert(30);s1.insert(20);s1.insert(40);setint s2;s2.insert(100);s2.insert(300);s2.insert(200);s2.insert(400);cout 交换前 endl;printSet(s1);printSet(s2);cout endl;cout 交换后 endl;s1.swap(s2);printSet(s1);printSet(s2);
}int main() {//test01();test02();system(pause);return 0;
}
交换前
10 20 30 40
100 200 300 400交换后
100 200 300 400
10 20 30 40
请按任意键继续. . .总结
统计大小 — size判断是否为空 — empty交换容器 — swap
2.4 set插入和删除
功能描述
set容器进行插入数据和删除数据
函数原型
insert(elem); //在容器中插入元素。clear(); //清除所有元素erase(pos); //删除pos迭代器所指的元素返回下一个元素的迭代器。erase(beg, end); //删除区间[beg,end)的所有元素 返回下一个元素的迭代器。erase(elem); //删除容器中值为elem的元素。
示例
#include setvoid printSet(setint s)
{for (setint::iterator it s.begin(); it ! s.end(); it){cout *it ;}cout endl;
}//插入和删除
void test01()
{setint s1;//插入s1.insert(10);s1.insert(30);s1.insert(20);s1.insert(40);printSet(s1);//删除s1.erase(s1.begin());printSet(s1);s1.erase(30);printSet(s1);//清空//s1.erase(s1.begin(), s1.end());s1.clear();printSet(s1);
}int main() {test01();system(pause);return 0;
}10 20 30 40
20 30 40
20 40请按任意键继续. . .总结
插入 — insert删除 — erase清空 — clear
2.5 set查找和统计
功能描述
对set容器进行查找数据以及统计数据
函数原型
find(key); //查找key是否存在,若存在返回该键的元素的迭代器若不存在返回set.end();count(key); //统计key的元素个数
示例
#include set//查找和统计
void test01()
{setint s1;//插入s1.insert(10);s1.insert(30);s1.insert(20);s1.insert(40);//查找setint::iterator pos s1.find(30);if (pos ! s1.end()){cout 找到了元素 *pos endl;}else{cout 未找到元素 endl;}//统计int num s1.count(30);cout num num endl;
}int main() {test01();system(pause);return 0;
}
找到了元素 30
num 1
请按任意键继续. . .总结
查找 — find 返回的是迭代器统计 — count 对于set结果为0或者1
2.6 set和multiset区别
学习目标
掌握set和multiset的区别
区别
set不可以插入重复数据而multiset可以set插入数据的同时会返回插入结果表示插入是否成功multiset不会检测数据因此可以插入重复数据
示例
#include set//set和multiset区别
void test01()
{setint s;pairsetint::iterator, bool ret s.insert(10);if (ret.second) {cout 第一次插入成功! endl;}else {cout 第一次插入失败! endl;}ret s.insert(10);if (ret.second) {cout 第二次插入成功! endl;}else {cout 第二次插入失败! endl;}//multisetmultisetint ms;ms.insert(10);ms.insert(10);for (multisetint::iterator it ms.begin(); it ! ms.end(); it) {cout *it ;}cout endl;
}int main() {test01();system(pause);return 0;
}第一次插入成功!
第二次插入失败!
10 10
请按任意键继续. . .总结
如果不允许插入重复数据可以利用set如果需要插入重复数据利用multiset
2.7 pair对组创建
功能描述
成对出现的数据利用对组可以返回两个数据
两种创建方式
pairtype, type p ( value1, value2 );pairtype, type p make_pair( value1, value2 );
示例
#include string//对组创建
void test01()
{pairstring, int p(string(Tom), 20);cout 姓名 p.first 年龄 p.second endl;pairstring, int p2 make_pair(Jerry, 10);cout 姓名 p2.first 年龄 p2.second endl;
}int main() {test01();system(pause);return 0;
}
姓名 Tom 年龄 20
姓名 Jerry 年龄 10
请按任意键继续. . .总结
两种方式都可以创建对组记住一种即可
2.8 set容器排序
学习目标
set容器默认排序规则为从小到大掌握如何改变排序规则
主要技术点
利用仿函数可以改变排序规则
示例一 set存放内置数据类型
#include setclass MyCompare
{
public:bool operator()(int v1, int v2) {return v1 v2;}
};
void test01()
{ setint s1;s1.insert(10);s1.insert(40);s1.insert(20);s1.insert(30);s1.insert(50);//默认从小到大for (setint::iterator it s1.begin(); it ! s1.end(); it) {cout *it ;}cout endl;//指定排序规则setint,MyCompare s2;s2.insert(10);s2.insert(40);s2.insert(20);s2.insert(30);s2.insert(50);for (setint, MyCompare::iterator it s2.begin(); it ! s2.end(); it) {cout *it ;}cout endl;
}int main() {test01();system(pause);return 0;
}
10 20 30 40 50
50 40 30 20 10
请按任意键继续. . .总结利用仿函数可以指定set容器的排序规则
示例二 set存放自定义数据类型
#include set
#include stringclass Person
{
public:Person(string name, int age){this-m_Name name;this-m_Age age;}string m_Name;int m_Age;};
class comparePerson
{
public:bool operator()(const Person p1, const Person p2){//按照年龄进行排序 降序return p1.m_Age p2.m_Age;}
};void test01()
{setPerson, comparePerson s;Person p1(刘备, 23);Person p2(关羽, 27);Person p3(张飞, 25);Person p4(赵云, 21);s.insert(p1);s.insert(p2);s.insert(p3);s.insert(p4);for (setPerson, comparePerson::iterator it s.begin(); it ! s.end(); it){cout 姓名 it-m_Name 年龄 it-m_Age endl;}
}
int main() {test01();system(pause);return 0;
}
姓名赵云 年龄25 身高190
姓名刘备 年龄35 身高175
姓名孙权 年龄40 身高170
姓名曹操 年龄45 身高180
请按任意键继续. . .总结
对于自定义数据类型set必须指定排序规则才可以插入数据
三、 map/ multimap容器
3.1 map基本概念
简介
map中所有元素都是pairpair中第一个元素为key键值起到索引作用第二个元素为value实值所有元素都会根据元素的键值自动排序
本质
map/multimap属于关联式容器底层结构是用二叉树实现。
优点
可以根据key值快速找到value值
map和multimap区别
map不允许容器中有重复key值元素multimap允许容器中有重复key值元素
3.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;
}key 1 value 10
key 2 value 20
key 3 value 30key 1 value 10
key 2 value 20
key 3 value 30key 1 value 10
key 2 value 20
key 3 value 30请按任意键继续. . .总结map中所有元素都是成对出现插入数据时候要使用对组
3.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;
}
m不为空
m的大小为 3
交换前
key 1 value 10
key 2 value 20
key 3 value 30key 4 value 100
key 5 value 200
key 6 value 300交换后
key 4 value 100
key 5 value 200
key 6 value 300key 1 value 10
key 2 value 20
key 3 value 30请按任意键继续. . .总结
统计大小 — size判断是否为空 — empty交换容器 — swap
3.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;
}
key 1 value 10
key 2 value 20
key 3 value 30
key 4 value 40key 2 value 20
key 3 value 30
key 4 value 40key 2 value 20
key 4 value 40请按任意键继续. . .总结 map插入方式很多记住其一即可 插入 — insert 删除 — erase 清空 — clear
3.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;
}找到了元素 key 3 value 30
num 1
请按任意键继续. . .总结
查找 — find 返回的是迭代器统计 — count 对于map结果为0或者1
3.6 map容器排序
学习目标
map容器默认排序规则为 按照key值进行 从小到大排序掌握如何改变排序规则
主要技术点:
利用仿函数可以改变排序规则
示例
#include mapclass MyCompare {
public:bool operator()(int v1, int v2)const {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;
}key:5 value:50
key:4 value:40
key:3 value:30
key:2 value:20
key:1 value:10
请按任意键继续. . .总结
利用仿函数可以指定map容器的排序规则对于自定义数据类型map必须要指定排序规则,同set容器
实战案例-员工分组 案例描述
公司今天招聘了10个员工ABCDEFGHIJ10名员工进入公司之后需要指派员工在那个部门工作员工信息有: 姓名 工资组成部门分为策划、美术、研发随机给10名员工分配部门和工资通过multimap进行信息的插入 key(部门编号) value(员工)分部门显示员工信息
实现步骤
创建10名员工放到vector中遍历vector容器取出每个员工进行随机分组分组后将员工部门编号作为key具体员工作为value放入到multimap容器中分部门显示员工信息
案例代码
#include iostream
using namespace std;
#include vector
#include map
// 定义员工类
class Person {
public:Person(string name, int money) {this-m_name name;this-m_money money;}string m_name;int m_money;
};
// 添加员工到vector中
void addPerson(vectorPerson v) {// 创建员工string namelist ABCDEFGHIJ;for (int i 0; i 10; i) {string name 员工;name namelist[i];int money rand() * 100;Person p(name, money);v.push_back(p); // 添加员工}
}
// 添加员工和部门之间关系
void addinf(multimapstring, Person mp, vectorPerson v) {// 部门mapmapint, string infmp;infmp.insert(make_pair(1, 策划));infmp.insert(make_pair(2, 美术));infmp.insert(make_pair(3, 研发));for (int i 0; i 10; i) {// 创建随机部门int num rand() % 31;//cout infmp[num] endl;mp.insert(make_pair(infmp[num],v[i]));}
}
void showdata(multimapstring, Person mp) {multimapstring, Person::iterator pos mp.find(策划);cout 策划部门 endl;int count mp.count(策划); // 统计具体人数int index 0;for (; pos ! mp.end() index count; pos, index){cout 姓名 pos-second.m_name 工资 pos-second.m_money endl;}cout 美术部门 endl;count mp.count(美术); // 统计具体人数index 0;for (; pos ! mp.end() index count; pos, index){cout 姓名 pos-second.m_name 工资 pos-second.m_money endl;}cout 研发部门 endl;count mp.count(研发); // 统计具体人数index 0;for (; pos ! mp.end() index count; pos, index){cout 姓名 pos-second.m_name 工资 pos-second.m_money endl;}
}
int main() {srand((unsigned int)time(NULL));vectorPerson v;addPerson(v);multimapstring, Person mp;addinf(mp,v);showdata(mp);system(pause);return 0;}策划部门
姓名 员工B 工资 313100
姓名 员工C 工资 1022600
姓名 员工D 工资 2403900
姓名 员工I 工资 2245700
姓名 员工J 工资 2977900
美术部门
姓名 员工A 工资 3176900
姓名 员工E 工资 625100
姓名 员工G 工资 2297300
研发部门
姓名 员工F 工资 1143300
姓名 员工H 工资 1370600
请按任意键继续. . .总结
当数据以键值对形式存在可以考虑用map 或 multimap
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85969.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!