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

STL15-map/multimap容器相关推荐

  1. 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】

    [C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...

  2. C++STL的map/ multimap容器

    3.9.1 map基本概念 简介: map中所有元素都是pair pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序 本质: map ...

  3. map/multimap容器

    简介: map中所有元素都是pair pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序 本质: map/multimap属于关联式 ...

  4. C++ map / multimap容器

    目录 1. map基本概念 2. map构造和赋值 3. map大小和交换 4. map插入和删除 5. map查找和统计 6. map容器排序 1. map基本概念 简介: map中所有元素都是pa ...

  5. map multimapc++_黑马C++视频笔记《STL之map/multimap》

    /* map/multimap容器 * map/multimap属于关联式容器,底层结构是用二叉树实现. * - map中所有元素都是pair: * - pair中第一个元素为key(键值),起到索引 ...

  6. STL学习系列九:Map和multimap容器

    1.map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺 ...

  7. STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)

    目录 前言 [1]stack操作以及应用 stack的几个核心接口 利用stack完成进制转换 [2]priority_queue操作以及应用 priority_queue的几个核心接口 利用prio ...

  8. STL之map和multimap容器

    1.简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺序排列.元素插入过程是按排 ...

  9. C++ STL 容器的一些总结 --- set(multiset)和map(multimap)

    1 set和multiset 1.1 插入元素方式 set只能用insert插入数据. insert返回值是一个pair<iterator, bool>, 即插入数据的迭代器以及是否插入成 ...

  10. map容器/multimap容器

    目录 1.map基本概念 简介 本质 优点 map和multimap区别 2.map构造和赋值 功能描述: 函数原型 3.map大小和交换 功能描述 函数原型 4 map插入和删除 功能描述 函数原型 ...

最新文章

  1. 【Android 基础】Animation 动画介绍和实现
  2. Spring AOP 实现原理与 CGLIB 应用
  3. Python正则表达式集锦
  4. mysql源码启动_Mysql源码安装、配置、初始化及启动
  5. 数据结构与算法之前缀数
  6. 我的win7黑屏解决方案
  7. 现代软件工程 作业 结对编程 模板
  8. Android 中文API (65) —— BluetoothClass[蓝牙]
  9. Java编程思想精彩评注分享之一
  10. TotalFinder for Mac(Finder增强工具)v1.14.1
  11. SK-Learn之决策树
  12. 数独游戏的设计与实现
  13. 微信小程序实现电商购物
  14. windows 用choco 安装nvm
  15. circos 可视化手册-histograms 篇
  16. vray许可服务器信息无名,【1人回答】vray3.6无法获取许可-3D溜溜网
  17. Python学习三: 爬虫高级技巧 与 模拟实战练习
  18. Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理
  19. 面试常见问题回答技巧(70题)
  20. 机房预约系统(黑马程序员)

热门文章

  1. 【java8新特性】——Optional详解(三)
  2. oracle数据库日期加一,日期和Oracle数据库
  3. python中计算如何实现_基于python如何实现计算两组数据P值
  4. vue 手机端路由切换滑动_vue移动端router-view嵌套实现底部导航切换
  5. mysql替换sql中rank函数_MySQL sql Rank()函数实现
  6. android 9图片报错,Android2.1加载9Patch图片运行后报错
  7. js中的if与Java中的if_JS直接if参数的用法JS中!和!!区别
  8. mysql 获取天数_MySQL获取某月份的天数
  9. 小白学python爬虫_小白学爬虫——第一部分:简单学习Python
  10. 在家怎么看公司服务器上的文件,怎么查看云服务器上的文件