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为双向开口容器,见下图. ...
随机推荐
- NSIS 自定义安装界面准确获取安装进度完美解决方案
友情提醒:随着7zip版本快速更新,nsis7z插件已经不能全面兼容新版,使用本例子请将7zip版本降至9.2x以下并下载最新版nsis7z.dll! ------------------------ ...
- 痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT10xx系列MCU外接24MHz晶振的作用. 痞子衡之前写过一篇关于时钟引脚的文章 <i.MXRT1xxx系列MCU时 ...
- GC plan_phase二叉树挂接的一个算法
楔子 在看GC垃圾回收plan_phase的时候,发现了一段特殊的代码,仔细研究下得知,获取当前数字bit位里面为1的个数. 通过这个bit位为1的个数(count),来确定挂接当前二叉树子节点的一个 ...
- tListener监听器
1.概念 监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动. Servlet监听器:Servlet规范中定义的一种特殊类,它用于 ...
- spring boot+vue前后端项目的分离(我的第一个前后端分离项目)
文章目录 1.前端vue的搭建 2.后端项目的构建 pom文件中引入的jar包 yml文件用来配置连接数据库和端口的设置 application.property进行一些整合 controller层( ...
- 18.drf request及源码分析
REST framework的 Request 类扩展了Django标准的 HttpRequest ,添加了对REST framework请求解析和身份验证的支持. 源代码片段: class Requ ...
- 你给文字描述,AI艺术作画,精美无比!附源码,快来试试!
作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 TensorFlow 实战系列:https://www.showmeai ...
- 使用VsCode调试UE5的PuerTs
使用VsCode调试UE5的PuerTs 1.下载测试的Demo项目 配置PuerTs的步骤这里不赘述. 2.准备工作 2.1 打开项目 正常来说,直接打开项目可以看到如下画面 如果直接点击运行,可以 ...
- .NET 7 中 LINQ 的疯狂性能提升
LINQ 是 Language INtegrated Query 单词的首字母缩写,翻译过来是语言集成查询.它为查询跨各种数据源和格式的数据提供了一致的模型,所以叫集成查询.由于这种查询并没有制造新的 ...
- perl中ENV的使用
在打印环境变量的时候可以用到.实际上是%ENV,perl中的哈希变量,里面保存的是环境变量.键是环境变量名,值是环境变量值.例如,有一个环境变量是PATH,其值为C:\windows,那么,打印这个环 ...