C++ STL map集合的使用
有时需要根据索引找到对应的元素,像键值对一样的查找,并对这些元素进行操作。可以同故宫调用STL里面的map来解决这个问题。
map关联集合的本质也是一棵红黑树,可以看做一个下标可以是任意类型的数组。
头文件是map:#include<map>
常用方法
1)map<A,B> ds 建立一个名为ds、下标类型为A,元素类型为B的映射表,例如
map<string,int> 就是一个将string映射到int的映射表
2)ds[A] = B 把这个“数组”中下标为A的位置的值变成B,这里下标可以是任意类型,不一定限定为大于0的整数
3)ds[A] 访问这个“数组”中下标为A的元素,可以直接输出如cout<<ds["ykx666"]<<endl;
4)ds.end() 返回映射表中最后一个元素的下一个元素的地址,通常配合其他方法来确认某个元素是否存在
5)ds.find(x) 查询x在映射表中的地址,如果不存在,则返回ds.end()
6)ds.empty() 如果映射表为空,则返回1,否则返回0
7)ds.size() 返回映射表中的元素个数
8)ds.erase(A) 删除这个”数组”中下标为A的元素
注意:在使用ds[A]访问“数组”下标为A的元素时,如果对应元素不存在,则会自动创建下标为A、值为默认值(例如,所有数值类型的默认值是0,string字符串是空字符串)的元素。
光说光看 知识是不够全面的,来结合题目看看。
题目选自洛谷P5266
题目描述
您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 10^5条):
- 插入与修改,格式
1 NAME SCORE
:在系统中插入姓名为 NAME(由字母和数字组成不超过 20 个字符的字符串,区分大小写) ,分数为{SCORE}SCORE(0<SCORE<231) 的学生。如果已经有同名的学生则更新这名学生的成绩为 SCORE。如果成功插入或者修改则输出OK
。 - 查询,格式
2 NAME
:在系统中查询姓名为 NAME 的学生的成绩。如果没能找到这名学生则输出Not found
,否则输出该生成绩。 - 删除,格式
3 NAME
:在系统中删除姓名为 NAME 的学生信息。如果没能找到这名学生则输出Not found
,否则输出Deleted successfully
。 - 汇总,格式
4
:输出系统中学生数量。
输入格式
无
输出格式
无
输入输出样例
输入 1
5 1 lxl 10 2 lxl 3 lxl 2 lxl 4
输出 1
OK 10 Deleted successfully Not found 0
解题代码:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<map>
using namespace std;
int n,opt,score; string name;
map<string,int> ds;
int main(){cin>>n;while(n--){cin>>opt;if(opt == 1){cin>>name>>score;ds[name] = score;cout<<"OK"<<endl;}else if(opt == 2){cin>>name;if(ds.find(name) != ds.end())cout<<ds[name]<<endl;else cout<<"Not found"<<endl;}else if(opt == 3){cin>>name;if(ds.find(name) != ds.end()){ds.erase(ds.find(name));cout<<"Deleted successfully"<<endl;}else{cout<<"Not found"<<endl;}}else{cout<<ds.size()<<endl;}}return 0;
}
C++ STL map集合的使用相关推荐
- [C++] map集合的使用
[C++集合]STL中的map STL中的map以一种效率较高的形式(红黑树)实现了映射.(C++11又提供了一种更为先进的unordered_map,基于哈希表,拥有 O(1) 的时间复杂度,两种容 ...
- C++ map容器和multimap容器(STL map容器)
目录 1. 关联容器和map容器概述 2. map容器 2.1 map的创建以及初始化列表 2.2 map容器的一般常用属性(方法) 2.3 插入数据 2.4 数据的访问和遍历 2.5 数据的删除 2 ...
- C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)
1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...
- STL map 简介
STL map 简介 转载于:http://www.cnblogs.com/TianFang/archive/2006/12/30/607859.html 1.目录 map简介 map的功能 使用ma ...
- Java中的Map集合遍历总结(详尽版)
因为Map集合中的键值对排列无序,所以不能用传统的for循环来遍历,只能使用加强循环(for-each)和迭代器进行遍历. 让我们通过例子来了解Map集合的遍历: package gather; im ...
- 安卓取map集合转换为json_android json解析成map格式
"discount": { "3": "34", "4": "33", "5": ...
- Map集合中value()方法与keySet()、entrySet()区别 ——转载
为什么80%的码农都做不了架构师?>>> 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet(): 将Map中所有的键存入 ...
- java map 队列_Java:queue队列,map集合
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口.Lin ...
- 8.Map集合(HashMapTreeMap)
一.Map集合概述和使用 1.Map集合概述 Interface Map<K,V> K:键的类型 V:值的类型 将键映射到值的对象:不能包含重复的键:每个键可以映射到最多一个值 创建Map ...
最新文章
- 第二章 序列比对——Blast局部比对
- python 网络设备管理软件_一个查看网络设备信息Python小程序
- Python-100 练习题 02
- 一款动态跑路html源码,简单实用,上传解压就完事了
- 《Python游戏趣味编程》 第7章 飞机大战
- 因为造轮子,我一个月就转正了 | 原力计划
- 【气动学】基于matlab导弹拦截计算方法【含Matlab源码 982期】
- linux一键ghost,linux 下一键 Ghost
- 概率论数理统计笔记01(对应教材——《概率论与数理统计》(同济大学出版社出版))
- matlab2021a下载安装
- Spring+SpringMVC+MongoDB案例
- 重新实现reuseport逻辑,实现一致性哈希
- Kalman滤波在温度测量中的应用(含MATLAB仿真)
- 【学习笔记】炼数成金 Dataguru python2.x 2012
- C++小游戏笔记——射击小行星(附源码)
- linux课后作业答案第六章,操作系统 第六章作业习题解答
- IDC机房运维经验浅谈
- 佳能Canon imagePRESS C7010VP 打印机驱动
- 广州中大成考培训火热招生中
- Win7 无法用win+R打开dos命令窗口的问题
热门文章
- menuStrip之MdiWindowListItem判断子窗口是否被打开的方法
- Cisco正式停止MARS产品的销售
- Cisco交换机链路聚合
- Vue中data为何以函数形式返回
- linux设置蓝牙可连接网络,Linux下蓝牙参数设置程序
- petalinux板卡没有ip address_海思板卡端访问服务器的文件(一)
- Servlet相关(servletconfig、servletcontext、request)
- 超图Cesium卷帘遇到的坑
- bash中的grep函数_如何在Bash中编写函数
- qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面