STL15-map/multimap容器

map的key值不可以重复

multimap的key值可以重复

#if 1
#include<iostream>
#include<map>
using namespace std;
//初始化
void test01() {//map容器参数 第一个参数key的类型 第二个参数value类型map<int, int> mymap;//插入元素 pair.first key值 pair.second value值//第一种初始化方法pair<map<int,int>::iterator,bool> ret=mymap.insert(pair<int, int>(10, 20)); //前三种都是这样:判断插入成功与否if (ret.second) {cout << "第一次插入成功" << endl;}elsecout << "第一次插入失败" << endl;ret = mymap.insert(pair<int, int>(10, 30));if (ret.second) {cout << "第二次插入成功" << endl;}elsecout << "第二次插入失败" << endl;//第二种初始化方法mymap.insert(make_pair(20, 20));//第三种初始化方法mymap.insert(map<int,int>::value_type(30, 30));//第四种初始化方法mymap[40] = 40;for (map<int,int>::iterator it=mymap.begin();it!=mymap.end();it++){//*it取出来的是一个paircout <<"key:" <<it->first << "  value:"<<(*it).second << endl;}//此种方法//发现如果key不存在,创建pair插入到map容器中//如果发现key存在,那么会用新的value值替换原value值mymap[40] = 10;cout << "第二次遍历" << endl;for (map<int, int>::iterator it = mymap.begin(); it != mymap.end(); it++){//*it取出来的是一个paircout << "key:" << it->first << "  value:" << (*it).second << endl;}//如果通过【】方式访问map中一个不存在的key,//那么map会将这个访问的key插入到map中,并且给value一个默认值cout << mymap[60] << endl;cout << "第三次遍历" << endl;for (map<int, int>::iterator it = mymap.begin(); it != mymap.end(); it++){//*it取出来的是一个paircout << "key:" << it->first << "  value:" << (*it).second << endl;}
}
class MyKey {
public:MyKey(int index, int id) {this->mIndex = index;this->mID = id;}
public:int mIndex;int mID;
};
struct mycompare {bool operator()(MyKey k1, MyKey k2) {return k1.mIndex > k2.mIndex;}
};void test02() {//注意此处添加比较函数(系统不会对自定数据类型进行比较)map<MyKey, int,mycompare> mymap;  mymap.insert(make_pair(MyKey(1, 2), 1));mymap.insert(make_pair(MyKey(2, 3), 2));mymap.insert(make_pair(MyKey(4, 5), 4));for (map<MyKey, int, mycompare>::iterator it = mymap.begin(); it != mymap.end(); it++) {cout << it->first.mIndex << " " << (*it).first.mID << endl;}}
//equal_range
void test03() {map<int, int> mymap;mymap.insert(make_pair(1, 1));mymap.insert(make_pair(2, 2));mymap.insert(make_pair(3, 3));mymap.insert(make_pair(4, 4));mymap.insert(make_pair(6, 6));pair<map<int, int>::iterator, map<int, int>::iterator> ret=mymap.equal_range(5);cout << (*(ret.first)).first << endl;cout << (*(ret.second)).first << endl;ret = mymap.equal_range(2);cout << (*(ret.first)).first << endl;cout << (*(ret.second)).first << endl;}int main() {cout << "test01" << endl;test01();cout << "test02" << endl;test02();cout << "test03" << endl;test03();return 0;
}
#endif

运行结果:

multimap使用案例:

我的试验:

#if 1
#include<iostream>
#include<map>
#include<time.h>
#include<vector>
#include<string>
#define SaleDepartment 1
#define FinanceDepartment 2
#define TechnologyDepartment 3
using namespace std;//multimap案例
//公司招聘5名员工 需要指派员工在哪个部门工作
//人员信息有:姓名 年龄 电话 工资等
//通过multimap 进行信息的插入 保存 显示
//分部门显示员工信息 显示全部员工信息
class Person {
public:Person(){}Person(string name, int age, string tel, int salary) {mName = name;mAge = age;mTel = tel;mSalary = salary;}
public:string mName;int mAge;string mTel;int mSalary;
};
void CreateEmployee(vector<Person>& v) {string Name="ABCDE";for (int i = 0; i < 5; i++){Person p;p.mName = "员工";p.mName+=Name[i];p.mAge = 20 + i;p.mTel = "010-88888888";p.mSalary = 10000;v.push_back(p);}
}
void AssignDepartment(multimap<int, Person> &mp, vector<Person>& v) {srand(time(NULL));for (int i = 0; i < v.size(); i++){int DepartmentID = rand() % 3 + 1;  //生成1-3之间的随机数cout << "rand() value:"<<DepartmentID << endl;switch (DepartmentID){case 1://mp.insert(SaleDepartment, v[i]);  我的错误//mp.insert(make_pair<SaleDepartment, v[i]>);  我的错误cout << "enter SaleDepartment" << endl;mp.insert(make_pair(SaleDepartment, v[i]));break;case 2:cout << "enter FinanceDepartment" << endl;mp.insert(make_pair(FinanceDepartment, v[i]));break;case 3:cout << "enter TechnologyDepartment" << endl;mp.insert(make_pair(TechnologyDepartment, v[i]));break;default:break;}}}void ShowEmployeeByDepart(multimap<int, Person> &mp, int Department) {int n = mp.count(Department);cout << Department << endl;for (multimap<int, Person>::iterator it = mp.find(Department); it != mp.end(), n>0; it++){cout <<(*it).second.mName << endl;n--;}
}
void ShowEmployee(multimap<int, Person> &mp) {ShowEmployeeByDepart(mp, SaleDepartment);ShowEmployeeByDepart(mp, FinanceDepartment);ShowEmployeeByDepart(mp, TechnologyDepartment);}void test01() {vector<Person> vp;CreateEmployee(vp);multimap<int, Person> mp;AssignDepartment(mp, vp);ShowEmployee(mp);
}int main() {test01();return 0;
}
#endif

标准:

#if 1
#include<iostream>
#include<map>
#include<time.h>
#include<vector>
#include<string>
#define SaleDepartment 1
#define FinanceDepartment 2
#define TechnologyDepartment 3
using namespace std;//multimap案例
//公司招聘5名员工 需要指派员工在哪个部门工作
//人员信息有:姓名 年龄 电话 工资等
//通过multimap 进行信息的插入 保存 显示
//分部门显示员工信息 显示全部员工信息//class 默认private struct默认public
class Person {
public:Person() {}Person(string name, int age, string tel, int salary) {mName = name;mAge = age;mTel = tel;mSalary = salary;}
public:string mName;int mAge;string mTel;int mSalary;
};void CreateEmployee(vector<Person>& v) {string Name = "ABCDE";for (int i = 0; i < 5; i++){Person p;p.mName = "员工";p.mName += Name[i]; //string类型拼接不可直接用+号,必须用+=p.mAge = 20 + i;p.mTel = "010-88888888";p.mSalary = 10000;v.push_back(p);}
}void AssignDepartment(multimap<int, Person> &mp, vector<Person>& v) {srand(time(NULL));for (vector<Person>::iterator it=v.begin();it!=v.end();it++){int DepartmentID = rand() % 3 + 1;  //生成1-3之间的随机数 rand()%(max-min+1)+mincout << "rand() value:" << DepartmentID << endl;switch (DepartmentID){case SaleDepartment://mp.insert(SaleDepartment, v[i]);  我的错误//mp.insert(make_pair<SaleDepartment, v[i]>);  我的错误//cout << "enter SaleDepartment" << endl;mp.insert(make_pair(SaleDepartment, *it));break;case FinanceDepartment://cout << "enter FinanceDepartment" << endl;mp.insert(make_pair(FinanceDepartment, *it));break;case TechnologyDepartment://cout << "enter TechnologyDepartment" << endl;mp.insert(make_pair(TechnologyDepartment, *it));break;default:break;}}}void ShowEmployeeByDepart(multimap<int, Person> &mp, int Department) {//查找此department下的第一个员工multimap<int, Person>::iterator itt = mp.find(Department);//count查找到此Department下的员工个数int n = mp.count(Department); cout << Department << endl;for (multimap<int, Person>::iterator it=itt; it != mp.end(), n>0; it++){cout <<"姓名:" <<(*it).second.mName <<"年龄:"<<(*it).second.mAge<<"电话:"<<(*it).second.mTel<< "工资:" << (*it).second.mSalary << endl;n--;}
}
void ShowEmployee(multimap<int, Person> &mp) {ShowEmployeeByDepart(mp, SaleDepartment);ShowEmployeeByDepart(mp, FinanceDepartment);ShowEmployeeByDepart(mp, TechnologyDepartment);}void test01() {//存放新员工的信息vector<Person> vp;//创建员工CreateEmployee(vp);multimap<int, Person> mp;//员工分组AssignDepartment(mp, vp);//打印每一部门员工信息ShowEmployee(mp);
}int main() {test01();return 0;
}
#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php nginx日志分析,如何通过NGINX的log日志来分析网站的访问情况,试试这些命令...

想知道你的网站每天的访问情况吗&#xff1f;有多少人访问了&#xff1f;访问最多的页面是哪个&#xff1f;哪个时段访问的人最多&#xff1f;哪个地方访问的最多&#xff1f;每秒有多少请求&#xff1f;很好奇吧&#xff0c;只要你是使用了nginx进行请求抓发&#xff0c;那么就…

php带来互联网的影响,网络对我们的影响有哪些?

影响有&#xff1a;1、丰富了我们的业余生活&#xff1b;2、降低了获取知识的成本&#xff0c;降低了提升工作的能力的成本&#xff0c;提高了工作的效率&#xff0c;可以快速建立良好的人脉关系&#xff1b;3、让购物变得更加简单便捷&#xff1b;4、朋友间深度沟通与交流越来…

STL17-函数对象

仿函数&#xff1a; #include<iostream> #include<vector> #include<algorithm> using namespace std; //仿函数&#xff08;函数对象&#xff09;重载“&#xff08;&#xff09;”操作符 使类对象可以像函数那样调用 //仿函数是一个类&#xff0c;不是一个…

STL18常用算法

#include<iostream> #include<algorithm> #include<vector> using namespace std; //transform 将一个容器中的元素搬运在另一个容器中 #if 0 //错误 struct PrintVector {void operator()(int v) {cout << v << " ";} }; void test0…

php中页面平滑回到顶部代码,原生JS实现平滑回到顶部组件

返回顶部组件是一种极其常见的网页功能&#xff0c;需求简单&#xff1a;页面滚动一定距离后&#xff0c;显示返回顶部的按钮&#xff0c;点击该按钮可以将滚动条滚回至页面开始的位置。实现思路也很容易&#xff0c;只要改变document.documentElement.scrollTop或document.bod…

C++基础01-C++对c的增强

所谓namespace&#xff0c;是指标识符的各种可见范围。C标准程序库中的所 有标识符都被定义于一个名为std的namespace中。 一 &#xff1a;<iostream>和<iostream.h>格式不一样&#xff0c;前者没有后缀&#xff0c;实际上&#xff0c; 在你的编译器include文件夹…

C++基础02-C++对c的拓展

变量名实质上是一段连续存储空间的别名&#xff0c;是一个标号(门牌号) 通过变量来申请并命名内存空间. 通过变量的名字可以使用存储空间. 变量名&#xff0c;本身是一段内存的引用&#xff0c;即别名(alias). 引用可以看作一个已定义变量的别名。 引用的语法&#xff…

php小程序onload,微信小程序 loading 组件实例详解

这篇文章主要介绍了微信小程序 loading 组件实例详解的相关资料,需要的朋友可以参考下loading通常使用在请求网络数据时的一种方式&#xff0c;通过hidden属性设置显示与否主要属性&#xff1a;wxml显示loading正在加载jsPage({data:{// text:"这是一个页面"hiddenLo…

C++基础04-类基础

一、类和对象 面向对象三大特点&#xff1a;封装、继承、多态。 struct 中所有行为和属性都是 public 的(默认)。C中的 class 可以指定行为和属性的访问方式。 封装,可以达到,对内开放数据,对外屏蔽数据,对外提供接口。达到了信息隐蔽的功能。 class 封装的本质,在于将数…

C++基础05-类构造函数与析构函数

总结&#xff1a; 1、类对象的作用域为两个{}之间。在遇到}后开始执行析构函数 2、当没有任何显式的构造函数&#xff08;无参&#xff0c;有参&#xff0c;拷贝构造&#xff09;时&#xff0c;默认构造函数才会发挥作用 一旦提供显式的构造函数&#xff0c;默认构造函数不复…

PHP网站配置项,Thinkphp5通用网站后台配置项的动态添加及更新

一、引入无论平时我们自己制作&#xff0c;还是浏览别人的网站&#xff0c;它都具有其相应的一些共用的、通用的属性&#xff0c;比如&#xff1a;网站的名字&#xff0c;关键字、备案号、分页数量、是否开启缓存等信息。一些网站可能将配置项写死在后台&#xff0c;无法动态更…

oracle 查询cpu 100%,Oracle 11g中查询CPU占有率高的SQL

oracle版本&#xff1a;oracle11g背景&#xff1a;今天在Linux中的oracle服务上&#xff0c;运用top命令发现许多进程的CPU占有率是100%。操作步骤&#xff1a;以进程PID:7851为例执行以下语句&#xff1a;方法一&#xff1a;(1)通过PID&#xff0c;查得相对应的系统进程对应的…

C++基础08-this指针-const修饰成员函数-函数返回引用/值

一、this指针 1、C类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型仍然有效&#xff01; 2、C中类的普通成员函数都隐式包含一个指向当前对象的this指针。 3、静态成员函数、成员变量属于类 4、静态成员函数与普通成员函数的区别 静态成员函数不包含指…

C++基础09-货物售卖和MyArray实现

1、货物出货与进货 #if 0 #include<iostream> using namespace std; /* 某商店经销一种货物。货物购进和卖出时以箱为单位。各箱 的重量不一样&#xff0c;因此商店需要记录目前库存的总重量&#xff0c;现在用 C模拟商店货物购进和卖出的情况 */ class Goods { public:…

C++基础11-类和对象之操作符重载1

总结&#xff1a; 1、运算符重载的本质是函数重载 2、运算符重载可分为成员函数重载和全局函数重载(差一个参数) 3、运算符重载函数的参数至少有一个是类对象&#xff08;或类对象的引用&#xff09; 4、不可以被重载的操作符有&#xff1a;成员选择符(.) 成员对象选择符(.*) …

linux照片备份软件,Linux、Unix上5个惊艳开源备份软件

Linux和类Unix系统上5个惊艳的开源备份软件&#xff1a;Bacula、Amanda、Backupninja、Backuppc和UrBackup&#xff0c;这些都是既可以使用在Linux上也可以使用在Unix上面&#xff0c;他们的优点就是性能稳定&#xff0c;使用灵活。一个好的备份计划是非常必要的&#xff0c;这…

linux 添加重定向域名,Linux系统中Nginx的安装并进行域名认证和重定向

Linux系统中Nginx的安装并进行域名认证和重定向本文主要介绍Linux系统中Nginx的安装并进行域名认证和重定向&#xff0c;希望通过本知识点的讲解对大家今后的学习和工作有所帮助&#xff0c;下面进行具体介绍&#xff1a;12.6 Nginx安装cd /usr/local/srcwget http://nginx.org…

linux有读EC RAM的工具吗,Step to UEFI (179)Shell下 EC Ram 读取工具

最近工作需要在 UEFI Shell 下Check EC Ram 的设定&#xff0c;发现手上只有 Windows 下的读取工具(RW Everything)。于是研究了一下如何在Shell 读取 EC Ram。根据【参考1】读取的流程如下&#xff1a;Port 66 CommandsThere are also some EC commands that use ports 0x66 …

C++基础13-类和对象之继承1

在 C中可重用性(software reusability)是通过继承(inheritance)这一机制来实现的。 如果没有掌握继承性,就没有掌握类与对象的精华。 总结&#xff1a; 1、只要是父类中的private成员&#xff0c;不管是什么继承方式&#xff0c;儿子都访问不了&#xff0c;但它是存在在儿子之…

C++基础13-类和对象之继承2

总结&#xff1a; 1、子类对象可以当做父类对象使用 2、子类对象可以直接赋值给父类对象 3、子类对象能够直接初始化父类对象 4、父类指针可以直接指向子类对象 5、凡是继承过来的属性和函数都可以在子类中用this-> 进行访问 6、默认构造函数并不会初始化数据成员 7、如果…