map容器:键值和实值是分开的,排序规则按照键值排序

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<map>
#include<string>
using namespace std; template<class T>
void printMap(T &m){
for (map<int, string>::iterator it = m.begin(); it != m.end(); ++it){
cout << "key:" << it->first << " value:" << it->second << endl;
}
} //注意:map的排序规则,传入的参数不是pair类型,而是key类型
struct mycompare{
bool operator()(int key1, int key2){
return key1 > key2;
}
}; //1. map容器的使用
void test01(){
//map是否支持随机访问?不支持随机访问,双向迭代器 //创建map容器
map<int, string, mycompare> mymap; //1. 第一种插入方式
mymap.insert(pair<int,string>(3,"aaa"));
//2. 第二种插入方式
mymap.insert(make_pair(6, "bbb"));
//3. 第三种插入方式
mymap.insert(map<int,string>::value_type(2,"ccc"));
//4. 第四种插入方式
mymap[4] = "ddd";
mymap[4] = "eee"; mymap.erase(2); printMap(mymap); //cout << "size:" << mymap.size() << endl;
//如果使用[]号这种方式输出一个不存在的key的值,那么编译器会以指定key增加新的数据
//如果使用[]号方式插入一条key存在的数据,那么已有数据会被修改
//cout << mymap[100] << endl;
//cout << "size:" << mymap.size() << endl;
} //3. map查找操作
/*
find(key);//查找键key是否存在,若存在,返回该键的元素的迭代器;/若不存在,返回map.end();
count(keyElem);//返回容器中key为keyElem的对组个数。对map来说,要么是0,要么是1。对multimap来说,值可能大于1。
lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。
upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。
equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。
*/ void test02(){ map<int, string> mymap;
mymap.insert(make_pair(1, "aaa"));
mymap.insert(make_pair(2, "bbb"));
mymap.insert(make_pair(3, "ccc"));
mymap.insert(make_pair(4, "ddd"));
mymap.insert(make_pair(5, "eee")); map<int, string>::iterator it = mymap.find(30);
if (it == mymap.end()){
cout << "查找失败!" << endl;
}
else{
cout << "Key:" << it->first << " Value:" << it->second << endl;
} it = mymap.lower_bound(3);
if (it == mymap.end()){
cout << "查找失败!" << endl;
}
else{
cout << "Key:" << it->first << " Value:" << it->second << endl;
} it = mymap.upper_bound(3);
if (it == mymap.end()){
cout << "查找失败!" << endl;
}
else{
cout << "Key:" << it->first << " Value:" << it->second << endl;
} pair<map<int, string>::iterator, map<int, string>::iterator> ret = mymap.equal_range(3);
if (ret.first != mymap.end()){
cout << "Key:" << ret.first->first << " Value:" << ret.first->second << endl;
}
if (ret.second != mymap.end()){
cout << "Key:" << ret.second->first << " Value:" << ret.second->second << endl;
} } int main(){ //test01();
test02(); system("pause");
return EXIT_SUCCESS;
}

map容器案例:员工分组案例

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<ctime>
using namespace std; //公司今天招聘了5个员工,5名员工进入公司之后,需要指派员工在那个部门工作
//人员信息有: 姓名 年龄 电话 工资等组成
//通过Multimap进行信息的插入 保存 显示
//分部门显示员工信息 显示全部员工信息 #define SALE_DEPATMENT 1 //销售部门
#define DEVELOP_DEPATMENT 2 //研发部门
#define FINACIAL_DEPATMENT 3 //财务部门 class Woker{
public:
string mName;
int mAge;
int mSalary;
}; //创建员工
void CreateWorkers(vector<Woker> &vWorkers){ srand((unsigned int)time(NULL)); string nameSeed = "ABCDE";
for (int i = 0; i < 5;i ++){
Woker worker;
worker.mName = "员工";
worker.mName += nameSeed[i];
worker.mAge = rand() % 30 + 30;
worker.mSalary = rand() % 10000 + 10000;
vWorkers.push_back(worker);
} }
//员工分组
void WokerByGroup(vector<Woker> &vWorkers, multimap<int, Woker> &mWokers){ //遍历员工
for (vector<Woker>::iterator it = vWorkers.begin(); it != vWorkers.end(); ++it){ int departmentID = rand() % 3 + 1;
//员工保存在分组之后容器中
mWokers.insert(make_pair(departmentID,*it));
} } void Group(multimap<int, Woker> &mWokers, int depID){ multimap<int, Woker>::iterator it = mWokers.find(depID);
int mcount = mWokers.count(depID);
int index = 0;
for (; it != mWokers.end() && index < mcount; ++it, ++index){
cout << "Name:" << it->second.mName << " Age:" << it->second.mAge << " Salary:" << it->second.mSalary << "美刀!" << endl;
}
}
//打印各组员工信息
void PrintWorkers(multimap<int, Woker> &mWokers){ cout << "财务部门员工信息如下:" << endl;
Group(mWokers, FINACIAL_DEPATMENT);
cout << "研发部门员工信息如下:" << endl;
Group(mWokers, DEVELOP_DEPATMENT);
cout << "销售部门员工信息如下:" << endl;
Group(mWokers, SALE_DEPATMENT);
} int main(){ vector<Woker> vWorkers;// 保存未分组的员工信息
multimap<int, Woker> mWokers; //保存分组后的员工信息 CreateWorkers(vWorkers);
WokerByGroup(vWorkers, mWokers);
PrintWorkers(mWokers); system("pause");
return EXIT_SUCCESS;
}

STL map容器常用API的更多相关文章

  1. 详解C++ STL map 容器

    详解C++ STL map 容器 本篇随笔简单讲解一下\(C++STL\)中的\(map\)容器的使用方法和使用技巧. map容器的概念 \(map\)的英语释义是"地图",但\( ...

  2. C++ STL map容器值为指针时怎么释放内存

    最近在使用STL中map时,遇到了一个问题,就是当map中值为指针对象时怎么释放内存? // 站点与TCP连接映射表 (key为ip_port_stationCode, value为 clientSo ...

  3. STL --> map容器

    map容器 一.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 二.ma ...

  4. stl map容器 学习

    #include<map> 1.map的声明: map<string,int>map_1; map_1 就是一个string对int的映射. 2.map的用法(映射): map ...

  5. c++ STL map容器成员函数

    map容器用于查找,设置键值和元素值,输入键值,就能得到元素值.map对象中的元素时刻都是有序的,除非无序插入的.它是用平衡树创建的.查找很快. 函数 描述,注意有r的地方都是不能用it代替的. ma ...

  6. C++STL库中map容器常用应用

    #include<iostream> #include<cstdio> #include<map> //按键值大小构成二叉搜索树 using namespace s ...

  7. C++ STL map容器的说明测试1

    // maptest.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" /*********************************** ...

  8. 2.9 C++STL map/multimap容器详解

    文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...

  9. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  10. 2.4 C++STL deque容器详解

    文章目录 2.4.1 引入 2.4.2 代码示例 2.4.3 代码运行结果 2.4.4 具体案例 总结 2.4.1 引入 deque容器类比vector容器来学习. deque为双向开口容器,见下图. ...

随机推荐

  1. Flask 框架:运用Echarts绘制图形

    echarts是百度推出的一款开源的基于JavaScript的可视化图表库,该开发库目前发展非常不错,且支持各类图形的绘制可定制程度高,Echarts绘图库同样可以与Flask结合,前台使用echar ...

  2. vue3中pinia的使用总结

    pinia的简介和优势: Pinia是Vue生态里Vuex的代替者,一个全新Vue的状态管理库.在Vue3成为正式版以后,尤雨溪强势推荐的项目就是Pinia.那先来看看Pinia比Vuex好的地方,也 ...

  3. TCP和UDP的区别与联系以及网络字节序和主机字节序的转换函数实践

    TCP和UDP的区别 TCP是一个面向连接的.可靠的.基于字节流的传输层协议. 而UDP是一个面向无连接的传输层协议. 具体来分析,和 UDP 相比,TCP 有三大核心特性: 面向连接:所谓的连接,指 ...

  4. 研一入坑Go 文件操作

    1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "path" 7 "path/filep ...

  5. LcdTools如何编写MIPI指令(初始化代码)

    在LcdTools帮助文档中查看MIPI读写指令描述,如下图 编写LCM初始化代码就是配置LCM Driver IC寄存器值,一般只需用MipiWrite()指令写参数即可:下面介绍MipiWrite ...

  6. 4.Git分支查看&创建&切换&合并

    查看分支 git branch -v # 查看分支,*代表当前所在的分支     创建分支 git branch hot-fix # 创建一个hot-fix分支,然后使用-v查看 # 可以看到除了ma ...

  7. AngouriMath: 用于C#和F#的开源跨平台符号代数库

    AngouriMath是一个MIT协议开源符号代数库.也就是说,通过AngouriMath,您可以自动求解方程.方程组.微分.从字符串解析.编译表达式.处理矩阵.查找极限.将表达式转换为LaTeX,以 ...

  8. HTML躬行记(3)——WebRTC视频通话

    WebRTC 在创建点对点(P2P)的连接之前,会先通过信令服务器交换两端的 SDP 和 ICE Candidate,取两者的交集,决定最终的音视频参数.传输协议.NAT 打洞方式等信息. 在完成媒体 ...

  9. 编译安装PHP7.4

    1.下载PHP源码包 wget https://www.php.net/distributions/php-7.4.30.tar.gz 2.解压缩 tar xf php-7.4.30.tar.gz - ...

  10. 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.蓝牙综合介绍 3.精华文章汇总 4.结语 1.前言 大家好,我是董哥 ...