外贸网站建设 公司价格最好的购物网站

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,一经查实,立即删除!

相关文章

请勿直接解析到ip否则我司不能保证您的网站能正常运行!"js常用网页特效

人脸对比 人脸对比,顾名思义,就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS:作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集: 人脸数据_数据集-飞桨AI Studio星河社区 (b…

口碑好的番禺网站建设seo推广沧州公司电话

随着信息化时代的到来,数据安全已成为国家、企业和个人共同关注的焦点。政府系统国产化作为提高信息安全和自主可控能力的重要举措,正逐步得到广泛实施。在这一过程中,沙箱技术作为一种先进的安全机制,其在国产化系统加密效果方面…

成都网站建设外包业务网络文学网站开发

系统环境 一、FS相关网站 二、第三方库安装 1.apt安装 2.指定版本sofia-sip安装 3.指定版本spandsp安装 4.指定版本libks安装 5.指定版本openssl安装 三、指定版本FS安装 1.CPPFLAGS配置 2.编译器版本 3.FS配置编译 四、FS,fs_cli运行,模块加载 附录 1.安…

广州哪家做网站mt4外汇网站建设

文章目录前言一、什么是毕昇 JDK?1.1、毕昇 JDK 发展历程1.2、毕昇 JDK 的支持架构1.3、毕昇 JDK、OpenJDK 和 Oracle JDK 区别二、为什么要做毕昇 JDK?2.1、Oracle JDK 授权方式发生变化2.2、高版本 JDK 有价值特性的渴望2.3、应用的定制化优化诉求三、…

四川住房与城乡城乡建设厅网站做模板下载网站挣钱吗

文 | Akhil Raju源 | 机器之心在这里,既有头脑风暴,也有生活气息。本月初,时任苹果机器学习总监的 Ian Goodfellow 宣布在加入公司三年后辞职,没过几天,就有消息曝出大神去向定了,他将重返谷歌加入 DeepMin…

美容院网站源码如何在服务器上放网站

1.外墙外保温系统耐候性试验设备,测温点不应少于( ),每个测温点的温度与平均温度偏差不应大于( )。 A、2个,5℃ B、4个,5℃ C、2

天河企业网站建设网站总是跳转

目录 测试计划书 1. 引言 2. 测试目标 3. 测试方法 3.1 黑盒测试 (1)等价类划分: (2)边界值分析: (3)因果图: ​编辑(4)错误推测法 3.2 白盒测试 测试用例!! 4. 测试环境 5. 测试计划 6…

建设企业网站官网登录网站可以做二维码吗

十年婚姻总结八 女人一生的合伙人不能只是帅哥哥 女人一生的合伙人不能只是帅哥哥 浪漫的本质还是你的筹码。 比如你送男人5万的手表,但你没什么其他筹码(皮肤粗糙蜡黄、没人脉金钱资源、长的胖)。 那个男人会觉得你胡闹,你送的…

建筑网站模版网站权重排行榜

遇到问题,npm install less-loader7.3.0 --save安装好less-loader后,执行npm run serve 项目运行不起来,排查后发现在安装less-loader后就提示需要安装less,正确的安装应如下: npm install less less-loader7.3.0 --sa…

可信网站标准版做网站一万

对于那些拥有多个微信号的用户来说,频繁地在不同微信号和设备之间切换既麻烦又容易搞混。这时候,一款多微信聚合聊天神器——微信管理系统应运而生,为我们带来了极大的便利与高效。 下面一起来看看它都有哪些功能吧! 1、多微信同…

江西建设信息网站营销推广方式

NoSQL-Redis集群 一、集群:1.单点Redis带来的问题:2.解决:3.集群的介绍:4.集群的优势:5.集群的实现方式: 二、集群的模式:1.类型:2.主从复制: 三、搭建主从复制&#xff…

直接ip访问网站页面设计介绍

Spring事务-两种开启事务管理的方式 1、前期准备2、基于注解的声明式事务管理3、基于编程式的事务管理4、声明式事务失效的情况 例子:假设有一个银行转账的业务,其中涉及到从一个账户转钱到另一个账户。在这个业务中,我们需要保证要么两个账户…

建立内部网站需要多少钱郑州男科

目录 专栏导读之前的课程1、小球类设计2、挡板类的设计3、砖块类4、砖块与小球的边界碰撞检测5、检测到碰撞,删除砖块,改变运动方向完整版代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 …

网站建设的前期准备微博代替wordpress评论框

文章目录 vue3使用响应式数据 v-model导致响应式失效el-form表单无法输入的问题 vue3使用响应式数据 v-model导致响应式失效el-form表单无法输入的问题 参考文章 重构vue2项目时发现的问题,原始项目使用的是Element-ui。 其实vue3可以使用适配的Element-plus 问…

深圳网站建设公司服务平台如何建立小程序商城

题目描述 题目链接:21. 合并两个有序链表 - 力扣(LeetCode) 题目分析 这个算法思路很简单:就是直接找小尾插 定义一个tail和head,对比两个链表结点的val,小的尾插到tail->next,如果一个链表…

网站是怎么搭建的做好网站建设静态化

SQL优化是提升数据库性能的重要手段,以下是SQL优化的详细知识点: 正确使用索引:索引是加速数据检索的关键因素,可以通过合理的索引设计来提升查询性能。例如,在频繁使用的列上创建索引,使用联合索引等。 避…

蓝海国际版网站建设网络组建与安全通知

Vue.js 是一个流行的前端 JavaScript 框架,它提供了一种用于构建用户界面的渐进式方法。Vue 组件的生命周期钩子函数是一些特定的函数,它们在组件不同阶段被自动调用,可以让你在这些阶段执行特定的逻辑。下面是 Vue 组件的生命周期钩子函数以…

广东网站建站系统哪家好wordpress屏蔽广告

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 实现strstr函数功能 C 库函数 char *strstr(const char *haystack, const char *nee…

学校网站方案阜阳做网站

v-for​ 我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法&#xff0c;其中 items 是源数据的数组&#xff0c;而 item 是迭代项的别名&#xff1a; const items ref([{ message: Foo }, { message: Bar }]) <l…

垂直购物网站建设网站备案进程查询

Node.js中Buffer API详解 在Node.js中&#xff0c;Buffer是一个用于处理二进制数据流的全局对象&#xff0c;它类似于数组&#xff0c;但可以存储任意大小的数据。Buffer对象是由C代码实现的底层结构&#xff0c;而JavaScript代码则提供了一些高级的API。本文将介绍Node.js中B…