STL map容器常用API
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的更多相关文章
- 详解C++ STL map 容器
详解C++ STL map 容器 本篇随笔简单讲解一下\(C++STL\)中的\(map\)容器的使用方法和使用技巧. map容器的概念 \(map\)的英语释义是"地图",但\( ...
- C++ STL map容器值为指针时怎么释放内存
最近在使用STL中map时,遇到了一个问题,就是当map中值为指针对象时怎么释放内存? // 站点与TCP连接映射表 (key为ip_port_stationCode, value为 clientSo ...
- STL --> map容器
map容器 一.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 二.ma ...
- stl map容器 学习
#include<map> 1.map的声明: map<string,int>map_1; map_1 就是一个string对int的映射. 2.map的用法(映射): map ...
- c++ STL map容器成员函数
map容器用于查找,设置键值和元素值,输入键值,就能得到元素值.map对象中的元素时刻都是有序的,除非无序插入的.它是用平衡树创建的.查找很快. 函数 描述,注意有r的地方都是不能用it代替的. ma ...
- C++STL库中map容器常用应用
#include<iostream> #include<cstdio> #include<map> //按键值大小构成二叉搜索树 using namespace s ...
- C++ STL map容器的说明测试1
// maptest.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" /*********************************** ...
- 2.9 C++STL map/multimap容器详解
文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...
- 2.3 C++STL vector容器详解
文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...
- 2.4 C++STL deque容器详解
文章目录 2.4.1 引入 2.4.2 代码示例 2.4.3 代码运行结果 2.4.4 具体案例 总结 2.4.1 引入 deque容器类比vector容器来学习. deque为双向开口容器,见下图. ...
随机推荐
- Springboot集成阿里云短信
目录 1 前言 2 准备工作 2.1 了解流程 2.2 配置信息 2.3 短信签名和模板 2.3.1 签名 2.3.2 模板 2.3.3 存入数据库 3 SDK 4 集成Springboot 4.1 ...
- IPv4 与 IPv6的区别
在介绍 IPv4 到 IPv6 区别之前,我们先来简单了解一下 IPv4 和 IPv6. IPv4 网际协议版本4(英语:Internet Protocol version 4,IPv4),又称互联网 ...
- mongodb基础整理篇————副本概念篇[外篇]
前言 副本集整理. 开始逐步把mongodb博客补齐了. 正文 什么是副本集 副本集是一组服务器,其中一个是用于处理写入操作的主节点,还有多个用于保存主节点的数据副本的从节点. 如果主节点崩溃了,则从 ...
- Java基础面试总结
常见编译型语言:C.C++.Go.Rust 等(执行速度快,但开发效率低) 常见解释型语言:Python.JavaScript.PHP(开发效率高,但执行效率低) 先编译后解释:Java 重载和重写有 ...
- C/C++ 知海拾遗
C语言知识拾遗 2022/11/11 memset()函数用法 包含头文件:<string.h> 作用:给任意类型变量数组初始化,即万能初始化函数. 使用形式:memset( void* ...
- Unity之"诡异"的协程
为什么说是诡异的协程呢?首先从一个案例说起吧,示例如下: 游戏目标:让小车进入到对应颜色屋子里,即可获得一分.(转弯的道路可控) 为了让小车能够平滑转弯,小车的前进方向需要和车子的位置与圆心组成的 ...
- Codeforces Round #817 (Div. 4)
CF传送门 因为洛谷题库未更新,所以给出的题面都是CF的. 现场打真是太卡了(梯子挂了,codeforc.es也崩了),所以五六分钟才打开题目 \(qwq\) A. Spell Check 萌萌题,把 ...
- python中的super()是什么?
技术场景:python中的super,名为超类,可以简单的理解为执行父类的__init__函数.由于在python中不论是一对一的继承,还是一子类继承多个父类,都会涉及到执行的先后顺序的问题.那么本文 ...
- 这次,听人大教授讲讲分布式数据库的多级一致性|TDSQL 关键技术突破
近年来,凭借高可扩展.高可用等技术特性,分布式数据库正在成为金融行业数字化转型的重要支撑.分布式数据库如何在不同的金融级应用场景下,在确保数据一致性的前提下,同时保障系统的高性能和高可扩展性,是分布式 ...
- 安卓APP和小程序渗透测试技巧总结
安卓APP和小程序渗透测试技巧总结 免责声明: 安卓7以上抓取https流量包 证书信任 首先安装OpenSSL,此步骤不再赘述,可以参考百度. 然后安装模拟器(我使用的是夜神模拟器). 导出需要的证 ...